Я пытаюсь программно установить количество товаров, которые в настоящее время находятся в моей корзине Woocommerce, используя следующий код (здесь я ввел число 42 в качестве теста - динамическое значение будет введено, как только оно перестанет плохо себя вести).
Код, который я использую, выглядит следующим образом:
function update_quantity_in_cart( $cart ) {
if( ! is_cart() ) {
return;
}
// Iterate through each cart item
foreach( $cart->get_cart_contents() as $item_key=>$cart_item ) {
var_dump($cart);
if ( isset( $cart_item['quantity'] )){
$cart->set_quantity( $item_key, 42 ); // I think this line is causing the problem
}
} // end foreach
}
add_action( 'woocommerce_before_calculate_totals', 'update_quantity_in_cart', 5, 1 );
Все хорошо, пока я не добавлю строку "$ cart-> set_quantity ($ item_key, 42);"который выдает «Неустранимая ошибка: неперехваченная ошибка: достигнут максимальный уровень вложенности функций« 256 », прерывание!»ошибка.По какой-то причине добавление этой строки, кажется, заставляет ее продолжать цикл бесконечно.
var_dump () для $ cart возвращает объект, включающий в себя public 'cart_contents' (бит, который я пытаюсь получить), public 'remove_cart_contents', public 'apply_coupons' и многое другое.Мой инстинкт заключается в том, что он пытается обновить количество для всех этих, а не просто cart_contents.Если это так, есть ли способ изолировать содержимое корзины и просто вернуть ее.https://docs.woocommerce.com/wc-apidocs/class-WC_Cart.html предполагает, что get_cart_contents () должен это делать, но, очевидно, нет.
Что-то очевидно, что я здесь не так делаю?