Я использую плагин WooCommerce Subscriptions.
У меня есть продукт по подписке, который связан с простым продуктом WooCommerce с индивидуальной ценой в виде пакета для клиента.
Во время продления подписки я программно добавляю простой продукт в активную подписку.
У меня есть сценарий, в котором клиент отменяет подписку, а администратор одобряет отмену подписки.
В этом случае на странице подписки «Моя учетная запись» клиента отображается кнопка «Повторная подписка». При повторной подписке берется только последняя отмененная подписка на продукт подписки и осуществляется переход к оформлению заказа.
Можно ли как-нибудь добавить простые продукты во время повторной подписки?
Я попробовал приведенный ниже крючок, но он работает после создания новой подписки:
add_action('wcs_create_subscription', 'action_wcs_create_subscription', 10, 20)
Есть ли способ подключиться к процессу повторной подписки и добавить к оформлению заказа дополнительные простые товары?






Вы можете легко обнаружить повторную подписку в корзине.
В следующем коде вы определите простой идентификатор продукта, который будет добавлен при повторной подписке, и идентификатор продукта целевой подписки в корзине.
Код добавит ваш простой продукт в корзину, когда клиент повторно подпишется через «Подписки в моей учетной записи» (для подписки на конкретный продукт).
Код:
add_action( 'woocommerce_checkout_init', 'add_product_with_resubscription' );
function add_product_with_resubscription() {
$cart = WC()->cart;
$simple_product_id = 18; // Define the simple product ID to be added
$subscr_product_id = 138; // Define the targeted product subscription ID
$simple_is_in_cart = $is_resubscription = false; // Initializing
// Loop through cart items
foreach ( $cart->get_cart() as $item ) {
// Check for a specific resubscription
if ( isset($item['subscription_resubscribe'])
&& in_array($subscr_product_id, [$item['product_id'], $item['variation_id']]) ) {
$is_resubscription = true;
}
// Check that the simple product is not yet in cart
if ( $simple_product_id == $item['product_id'] ) {
$simple_is_in_cart = true;
}
}
// Add to cart the simple product and recalculate totals
if ( $is_resubscription && !$simple_is_in_cart ) {
$cart->add_to_cart($simple_product_id);
$cart->calculate_totals();
}
}
Код находится в файле function.php вашей дочерней темы (или в плагине). Протестировано и работает.