2016-05-06 13 views
3

最初(最初)の注文が作成された後に、有効な購読の次の支払い日を変更したいと考えています。次の設定方法Woocommerce Subscriptionsの支払い日は?

現在動作していないコードです。どうして?私は何が欠けていますか?

//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); 

} 

答えて

1

私はあなたが空の変数$product_idを使用して$subscription_keyを呼び出しているので、これは動作しないと信じています。
このコードを使用する関数では、$product_idの値はありません。

参照渡しまたは関数からの抽出によって渡す必要があります。

1

あなたが言ったこと、また開始日を設定する必要があります! (NOWでもかまいませんが)渡されなかった場合はエラーが発生します。 このように動作しました:

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'); 
    } 
} 
関連する問題