3

wordpress 4.2.2 と woocommerce 2.3.11 を使用して、ワインを販売するための e コマースを構築しています。6の倍数のボトルのみで注文を終了するカスタム関数を作成しました。これまでは問題ありませんが、6本のボトルのパッケージで2つのカテゴリがあるため、この2つのカテゴリがカウントされるのを避けたいです数量合計アイテムカート。私はphpの専門家ではないので、各アイテムがカテゴリ内にあるかどうかをチェックし、1つのパッケージカテゴリに属している場合は1つのアイテムを差し引く関数を作成しようとしています. これは、この 2 つのカテゴリのアイテムが 1 つある場合にのみ有効ですが、カートに 2 つのパッケージを追加すると、1 つだけが差し引かれます。

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
$total_products = WC()->cart->cart_contents_count;
$multiples = 6;
foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
    $prodotti = $values['data'];
    $terms = get_the_terms ($prodotti->id, 'product_cat');
    foreach ($terms as $term){
        $categoria = $term->term_id;
    }   

    if (($categoria == 169) || ($categoria == 152)) {
            $pacchetti = $values ['quantity'];  
            $totale = ($total_products-$pacchetti);
    } else {
        $totale = $total_products;
    }
}
echo $totale;
if ( ( $totale % $multiples ) > 0 )
    wc_add_notice( sprintf( __('You need to buy in quantities of 6 products', 'woocommerce'), $multiples ), 'error' );

}    

望ましいカウント:

画面 1 - 右カウント

既存のカウント

画面 2 - 間違った数え方

これを機能させるためのすべてのソリューションを受け入れます。

本当にありがとうございました!

4

1 に答える 1

2

あなたのコードは私にはかなり良さそうです。あなたが見逃していることの 1 つは、has_term()どの製品があなたの 2 つの特別なカテゴリに属しているかをより確実にテストする機能だと思います。

add_action( 'woocommerce_check_cart_items', 'woocommerce_check_cart_quantities' );
function woocommerce_check_cart_quantities() {
    $total_products = WC()->cart->cart_contents_count;
    $multiples = 6;
    $totale = 0;
    foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {
        $prodotti = $values['data'];

        if( ! has_term( array( 169, 152 ), 'product_cat', $prodotti->id ) ){
            $totale += $values['quantity'];
        } 

    }
    echo $totale;
    if ( ( $totale % $multiples ) > 0 ){
        wc_add_notice( sprintf( __('You need to buy in multiples of %d products', 'your-textdomain'), $multiples ), 'error' );
    }

}
于 2016-01-14T12:52:44.803 に答える