要在Woocommerce结帐页面上允许编辑购买订阅的开始日期和频率,您需要使用下面的代码:
//添加修改订阅开始日期和频率的字段 add_action('woocommerce_after_checkout_billing_form', 'add_subscription_fields');
function add_subscription_fields($checkout) { echo '
woocommerce_form_field('subscription_start_date', array(
'type' => 'date',
'class' => array('my-field-class form-row-wide'),
'label' => __('Subscription Start Date'),
'required' => true,
'default' => date('Y-m-d')
), $checkout->get_value('subscription_start_date'));
woocommerce_form_field('subscription_frequency', array(
'type' => 'select',
'class' => array('my-field-class form-row-wide'),
'label' => __('Subscription Frequency'),
'required' => true,
'options' => array(
'weekly' => __('Weekly'),
'monthly' => __('Monthly'),
'quarterly' => __('Quarterly'),
),
'default' => 'monthly'
), $checkout->get_value('subscription_frequency'));
echo '
}
//在订单数据中存储修改的字段 add_action('woocommerce_checkout_create_order', 'save_subscription_fields');
function save_subscription_fields($order) { $subscription_start_date = sanitize_text_field($_POST['subscription_start_date']); $subscription_frequency = sanitize_text_field($_POST['subscription_frequency']);
$order->update_meta_data('_subscription_start_date', $subscription_start_date);
$order->update_meta_data('_subscription_frequency', $subscription_frequency);
}
//修改订阅订单的开始日期和频率 add_action('woocommerce_subscriptions_created_for_switch', 'modify_subscription_start_date_and_frequency', 10, 4);
function modify_subscription_start_date_and_frequency($subscription, $old_order_id, $new_order_id, $args) { $new_subscription_start_date = wc_clean(isset($_POST['subscription_start_date']) ? $_POST['subscription_start_date'] : ''); $new_subscription_frequency = wc_clean(isset($_POST['subscription_frequency']) ? $_POST['subscription_frequency'] : '');
if (!empty($new_subscription_start_date)) {
$subscription->update_dates(array(
'trial_end' => wc_string_to_timestamp($new_subscription_start_date . ' 23:59:59') + (DAY_IN_SECONDS - 1),
'next_payment' => wc_string_to_timestamp($new_subscription_start_date . ' 00:00:00') + (DAY_IN_SECONDS - 1),