Я хочу добавить в корзину два продукта одновременно, один – оригинальный (текущий) продукт, а второй – из раскрывающегося списка
add_action('woocommerce_add_to_cart', 'custome_add_to_cart'); $cnt=2 function custome_add_to_cart() { global $woocommerce; $cnt = $cnt + 1; echo $cnt."X"; echo $p_id=$_POST['assessories']; $woocommerce->cart->add_to_cart($p_id, 1); }
Вывод: – Как вы можете видеть на выходном изображении ниже, он добавляет тот же раскрывающийся элемент много раз в корзину, но я хочу, чтобы только 1 количество добавлялось в корзину. кажется, что функция add_to_cart выполняется много раз. Что мне делать или как добавить фильтр с передачей второго выпадающего продукта в качестве параметра для добавления в функцию корзины? поэтому я могу добавить этот продукт также в корзину.
Функции woocommerce «add_to_cart» запускают «woocommerce_add_to_cart». Итак, в вашем коде запускается «add_to_cart», на котором запущен «woocommerce_add_to_cart», который запускает ваш код, который запускает «add_to_cart», etcetera etcetera … Вы создали рекурсивный цикл.
Вам нужно найти альтернативный способ или прекратить вызов $woocommerce->cart->add_to_cart($p_id, 1);
в вашем собственном коде.
Это должно работать:
add_action('woocommerce_add_to_cart', 'custome_add_to_cart'); function custome_add_to_cart() { global $woocommerce; $product_id = $_POST['assessories']; $found = false; //check if product already in cart if ( sizeof( WC()->cart->get_cart() ) > 0 ) { foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) { $_product = $values['data']; if ( $_product->id == $product_id ) $found = true; } // if product not found, add it if ( ! $found ) WC()->cart->add_to_cart( $product_id ); } else { // if no products in cart, add it WC()->cart->add_to_cart( $product_id ); } }
На основе следующего источника: https://docs.woothemes.com/document/automatically-add-product-to-cart-on-visit/
Это может быть старым, но попытались ли вы отменить параметр оценки после добавления в корзину ?, это нарушит цикл.
function custome_add_to_cart() { global $woocommerce; if(isset($_POST['assessories'])){ $cnt = $cnt + 1; echo $cnt . "X"; echo $p_id = $_POST['assessories']; $woocommerce->cart->add_to_cart($p_id, 1); unset($_POST['assessories']); } }
сfunction custome_add_to_cart() { global $woocommerce; if(isset($_POST['assessories'])){ $cnt = $cnt + 1; echo $cnt . "X"; echo $p_id = $_POST['assessories']; $woocommerce->cart->add_to_cart($p_id, 1); unset($_POST['assessories']); } }