Это может быть нубский вопрос, поэтому заранее извиняюсь.
У меня есть переменные продукты подписки, цена которых зависит от длины подписки. У меня также есть простые подписки, у которых subscription_length = 0. Когда корзина содержит оба типа, подписки Woocommerce создают две подписки.
Я пытаюсь изменить метаданные subscription_length всех товаров в корзине, чтобы они соответствовали самой длинной длине в корзине, чтобы была создана только одна подписка.
Я просто не могу найти правильный способ обновить корзину. Это могут быть просто глупые человеческие трюки с PHP.
Это последний вариант оператора, который сейчас не работает:
$cart[$item_key]['data']->subscription_length = $maxlength;
Я пробовал дюжину или больше вариантов темы, чтобы обновить данные $ cart. некоторые не удалось, а некоторые успешно, но данные в $ cart не изменились.
function csi_align_subscription_length() {
$maxlength = 0;
$cart = WC()->cart->get_cart();
//find the longest length
foreach ( $cart as $item_key => $item ){
if ( WC_Subscriptions_Product::is_subscription( $item['data'] ) ) {
$length = WC_Subscriptions_Product::get_length( $item['data'] );
$maxlength = ($length > $maxlength) ? $length : $maxlength ; //get the longest length
}
}
//set all subscription lengths to the longest lengths
foreach ( $cart as $item_key => $item ){
if ( WC_Subscriptions_Product::is_subscription( $item['data'] ) ) {
echo '';
echo "cart-item before: ". var_dump($cart[$item_key]);
$cart[$item_key]['data']->subscription_length = $maxlength;
echo "cart-item after: ".var_dump($cart[$item_key]);
echo '
';
}
}
WC () -> cart-> set_cart_contents ($ корзина);
}
add_filter ('woocommerce_subscription_cart_before_grouping', 'csi_align_subscription_length', 10, 1);
Мне просто нужно, чтобы подписки в корзине соответствовали общей группе, поэтому у меня только 1 заказ и 1 подписка на оформление заказа. Я открыт для другого подхода, если я потерялся на касательной.