2016-05-06 8 views
3

Ich möchte das nächste Zahlungsdatum von aktiven Abonnements ändern, nachdem der erste (erste) Auftrag erstellt wurde.Wie wird das nächste Zahlungsdatum in Woocommerce-Abonnements festgelegt?

aktuellen Code, der nicht funktioniert. Warum? Was vermisse ich?

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

} 

Antwort

1

Ich glaube, dass dies nicht funktioniert, weil Sie $subscription_key mit einem leeren Variable $product_id anrufen.
In Ihrer Funktion haben Sie mit diesem Code keinen Wert für $product_id.

Sie sollten es als Referenz übergeben oder aus der Funktion extrahieren.

1

was Sie gesagt haben und wir müssen auch ein Startdatum festlegen! (kann JETZT sein), aber wenn es nicht bestanden wird, wird ein Fehler ausgelöst. So funktioniert es:

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'); 
    } 
} 
Verwandte Themen