同時に2つの製品をカートに追加します。1つは元の(現在の)製品で、2つ目はドロップダウンリストからです
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関数が何度も実行されているようです。カート関数に追加するパラメーターとして2番目のドロップダウン製品を渡すフィルターを追加するにはどうすればよいですか?カートにこの商品を追加することもできます。
これはうまくいくはずです:
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/
Woocommerceの「add_to_cart」関数は、フック「woocommerce_add_to_cart」を実行します。したがって、コード内で「add_to_cart」が実行され、「woocommerce_add_to_cart」がコードを実行し、「add_to_cart」を実行します。etceteraetcetera ...再帰ループを作成しました。
別の方法を見つけるか、独自のコードで$woocommerce->cart->add_to_cart($p_id, 1);
の呼び出しを停止する必要があります。
あなたが探しているのは可変製品で、いくつかの属性があります!
とにかく、本当にそれをしたいのなら、remove_action関数が必要です:
_add_action('woocommerce_add_to_cart', 'custome_add_to_cart');
function custome_add_to_cart() {
$p_id=$_POST['assessories'];
remove_action('woocommerce_add_to_cart', __FUNCTION__);
WC()->cart->add_to_cart( $p_id );
}
_
これにより、アクションが無限にループするのを防ぎ、非常にシンプルです。そのため、その製品に対して一度だけ追加されます。カートに追加された数量を取得し、それをWC()->cart->add_to_cart
関数の2番目のパラメーターとして指定すると、両方が同じ数量になります。
___FUNCTION__
_は魔法のPHPタグであり、現在の機能の名前を文字列として提供します。si関数名が同じでない場合でも機能します