我尝试创建具有特定到期日期的订阅。
在下面的函数中,
$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;
}