如何为"woocommerce_add_to_cart"添加过滤器或挂钩

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/


Nie*_*aar 8

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);您自己的代码.