Как добавить фильтр или крючок для «woocommerce_add_to_cart»

введите описание изображения здесь

Я хочу добавить в корзину два продукта одновременно, один – оригинальный (текущий) продукт, а второй – из раскрывающегося списка

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']); } }