特定の有効期限のサブスクリプションを作成しようとしています。Woocommerceサブスクリプションの変更有効期限
以下の機能では、 $product_args
は、製品の詳細な配列です。この配列には、product_id、regular_priceなどが含まれます。product_idは、サブスクリプション変数プロダクトを参照します。
$start_date_timestamp
は、購読開始日です。このタイムスタンプは数ヶ月前になる可能性があります。
たとえば、2か月前(4月1日)に開始するサブスクリプションを作成する必要があります。サブスクリプション期間は3ヶ月ですので、サブスクリプション期限は7月1日でなければなりません。
しかし、今の問題は(私たちは現在、6月27日なので)、サブスクリプションの有効期限が9月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