web-dev-qa-db-ja.com

Woocommerceフィルタカートとカテゴリ固有の数量

だから基本的に、私は私のカートをフィルターにかけようとしています。 "cuvees"カテゴリーの商品がカートに入っている数が4,5,7,8,9,10,11,13,14,15,16,17,19,21の場合は、以下のメッセージが表示されます。 。

これまでのところ、ここで私がしたことがありますが、1つの値に対してしか機能しません。関数を宣言するときに配列を配置する必要がありますか?

add_action( 'woocommerce_check_cart_items', 'check_total' );
    function check_total() {
        // Only run in the Cart or Checkout pages
        if( is_cart() || is_checkout() ) {

            global $woocommerce, $product;
            $i=0;
            //$prod_id_array = array();
            //loop through all cart products
            foreach ( $woocommerce->cart->cart_contents as $product ) :


                // Set checking if there's y products in cuvees cart total
                $cart_product_total = 4;



                // See if any product is from the cuvees category or not
                if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :

                    $total_quantity += $product['quantity'];
                    //array_Push($prod_id_array, $product['product_id']);
                endif;

            endforeach;

            foreach ( $woocommerce->cart->cart_contents as $product ) :
                if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :
                    if( $total_quantity == $cart_product_total && $i == 0 ) {
                        // Display our error message
                        wc_add_notice( sprintf( '<h5 style="letter-spacing:0.5px;color:white;text-align:center;">/!\&nbsp;    Une commande de %s bouteilles n&#39;est pas possible&nbsp;! &nbsp;   /!\ </h5><br /> <br /><p style="text-align:center;"> L&#39;envoi n&#39;est possible que pour 1 | 2 | 3 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60  | 72 | 96 | 120 et plus bouteilles.</p>',
                            $cart_product_total,
                            $total_quantity ),
                        'error' );
                    }
                    $i++;
                endif;
            endforeach;
        }
    }        

ありがとうございました :)

2
nmnmnm

スクリプトの大部分でifステートメントとforeachステートメントに代替構造を使用し(:の代わりに{}を使用)、下部にif(){}の中を混ぜるので、エラーメッセージがどのように表示されるのかわかりません。許可されていないif : endif。詳細についてはこちらを参照してください。

http://php.net/manual/en/control-structures.alternative-syntax.php

私はあなたのコードを少し再構成しましたが、それをテストすることができないので、これを試してみてください:

add_action( 'woocommerce_check_cart_items', 'check_total' );
function check_total() {
    // Only run in the Cart or Checkout pages
    if( is_cart() || is_checkout() ) {

        global $woocommerce, $product;

        $total_quantity = 0;
        $display_notice = 1;
        $i = 0;
        //loop through all cart products
        foreach ( $woocommerce->cart->cart_contents as $product ) {

            // See if any product is from the cuvees category or not
            if ( has_term( 'cuvees', 'product_cat', $product['product_id'] )) {
                $total_quantity += $product['quantity'];
            }

        }
        // Set up the acceptable totals and loop through them so we don't have an ugly if statement below.
        $acceptable_totals = array(1, 2, 3, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 72, 96, 120);

        foreach($acceptable_totals as $total_check) {
            if ( $total_check == $total_quantity ) { $display_notice = 0; } 
        }

        foreach ( $woocommerce->cart->cart_contents as $product ) {
            if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) {
                if( $display_notice == 1 && $i == 0 ) {
                    // Display our error message
                    wc_add_notice( sprintf( '<h5 style="letter-spacing:0.5px;color:white;text-align:center;">/!\&nbsp;    Une commande de %d bouteilles n&#39;est pas possible&nbsp;! &nbsp;   /!\ </h5><br /> <br /><p style="text-align:center;"> L&#39;envoi n&#39;est possible que pour 1 | 2 | 3 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60  | 72 | 96 | 120 et plus bouteilles.</p>', $total_quantity),
                    'error' );
                }
                $i++;
            }
        }
    }
}

編集 - 表示通知ロジックの小さな間違い。

EDIT2 - 現在の製品数をエラーメッセージで返すようにコードを更新しました。

0
Jason Murray