luc*_*mit 6 php wordpress hook filter woocommerce
我想同时添加到购物车两个产品,一个是原始(当前)产品,第二个是从下拉列表
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);
}
Run Code Online (Sandbox Code Playgroud)
输出: - 正如您在下面的输出图像中看到的,它在购物车中多次添加相同的下拉项目,但我只想将1个数量添加到购物车.似乎add_to_cart函数运行了很多次.我应该怎么做或如何添加过滤器,并将第二个下拉产品作为参数添加到购物车功能?所以我也可以在购物车中添加此产品.
ale*_*lev 10
这应该工作:
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
基于以下来源:https://docs.woothemes.com/document/automatically-add-product-to-cart-on-visit/
woocommerce"add_to_cart"函数运行钩子"woocommerce_add_to_cart".因此,在您的代码中运行"add_to_cart",运行"woocommerce_add_to_cart"运行您的代码,运行"add_to_cart",等等...您创建了一个递归循环.
您需要找到一种替代方法,或者停止调用$woocommerce->cart->add_to_cart($p_id, 1);
您自己的代码.