我尝试创建具有特定到期日期的订阅。Woocommerce订阅更改到期日期
在下面的函数中, $product_args
是一个包含有关产品的详细信息的数组。此数组包含product_id,regular_price等。product_id引用订阅变量产品。
$start_date_timestamp
是订阅的开始日期。这个时间戳可以在几个月前。
例如,我需要从2月前(4月1日)开始创建订阅。订阅期限为3个月,因此订阅期限必须为7月1日。
但现在的问题是,订阅过期设置为9月27日(因为我们目前6月27日)
static function create_subscription($customer_id,$product_args,$billing_args,$shipping_args = false,$order_notes = false,$client_notes = false,$order_status = false,$start_date_timestamp = false) {
$start_date = false;
if($start_date_timestamp==false)
{
$start_date = date('Y-m-d H:i:s', strtotime('now'));
}
else
{
$start_date = date('Y-m-d H:i:s', $start_date_timestamp);
}
$order_id = \perfo\woocommerce\order::create_order($customer_id, $product_args, $billing_args,$shipping_args,$order_notes,$client_notes,$order_status);
if (! is_wp_error($order_id))
{
$wc_product = wc_get_product($product_args['product_id']);
$period = \WC_Subscriptions_Product::get_period($wc_product);
$interval = \WC_Subscriptions_Product::get_interval($wc_product);
$length = \WC_Subscriptions_Product::get_length($wc_product);
$expiration = \WC_Subscriptions_Product::get_expiration_date($product_args['product_id'],$start_date);
$subscription = wcs_create_subscription(array('order_id' => $order_id, 'billing_period' => $period, 'billing_interval' => $interval, 'start_date' => $start_date,'end'=>$expiration));
if(!is_wp_error($subscription))
{
$wc_product->set_regular_price($product_args['regular_price']);
$wc_product->set_price($product_args['regular_price']);
$subscription->add_product($wc_product, $product_args['quantity']);
$subscription->set_address($billing_args, 'billing');
if($shipping_args)
$subscription->set_address($shipping_args, 'shipping');
$subscription->update_dates(array(
'end' => $expiration,
));
$subscription->calculate_totals();
$subscription->save();
}
else
{
wp_delete_post($order_id,true);
}
return $subscription;
}
return $order_id;
}
请发表您使用调用这个函数和正在传递给它的所有参数的代码工作正常。谢谢! – Spartacus