Как установить дату следующего платежа в подписках Woocommerce?

Я хотел бы изменить дату следующего платежа активных подписок после создания Первоначального (первого) заказа.

текущий код, который не работает. Зачем? Что мне не хватает?

//fires when new order payment is complete (NOT RENEWAL but original order!)
add_action('woocommerce_payment_complete', 'fm_upate_next_payment_datetime');

function fm_upate_next_payment_datetime ( $order_id ) {

if (WC_Subscriptions_Order::order_contains_subscription( $order_id ) == false) return;
$subscription_key = WC_Subscriptions_Manager::get_subscription_key( $order_id, $product_id
= '');

//hard code next payment date...(must be in future)
$next_payment = date( 'Y-m-d H:i:s', '2016-05-20 00:10:10' );

//set the new payment date
WC_Subscriptions_Manager::set_next_payment_date( $subscription_key, $user_id = '', $next_payment );

}

3

Решение

что вы сказали, а также мы должны установить дату начала! (может быть СЕЙЧАС), но если он не пройден, он выдаст ошибку.
Получилось так работать:

function saveNewDate($post_id) {

$subscription = wcs_get_subscription( $post_id );
$dates        = array();

$datetime           = current_time( 'timestamp', true );
$dates[ 'start' ] = date( 'Y-m-d H:i:s', $datetime );
$datetime = strtotime( "08/23/2016 23:30" );
$dates['next_payment'] = date( 'Y-m-d H:i:s', $datetime );

try {
$subscription->update_dates( $dates, 'gmt' );
wp_cache_delete( $post_id, 'posts' );
} catch ( Exception $e ) {
wcs_add_admin_notice( $e->getMessage(), 'error' );
}
}
2

Другие решения

Я считаю, что это не работает, потому что вы звоните $subscription_key используя пустую переменную $product_id,
В вашей функции с этим кодом у вас нет значения для $product_id,

Вы должны передать его по ссылке или извлекая из функции.

1

Подписка на Woocommerce изменила дату следующего платежа до 3 дней:

add_action('woocommerce_thankyou', 'nextpaymentdatechange', 10, 1);

function nextpaymentdatechange($order_id){
if (WC_Subscriptions_Order::order_contains_subscription($order_id)) {
$subid = $order_id+1;
$nextdate = get_post_meta( $subid, '_schedule_next_payment', true );
$threedays_ago = date('Y-m-d H:i:s', strtotime('-3 days', strtotime($nextdate)));
update_post_meta($subid , '_schedule_next_payment', $threedays_ago);
}
}
0
По вопросам рекламы [email protected]