WooCommerce过滤购物车和类别特定数量

时间:2015-02-27 作者:nmnmnm

所以基本上,我在尝试过滤我的购物车。如果“cuvees”类别的产品在购物车中的编号为4、5、7、8、9、10、11、13、14、15、16、17、19、21,我希望显示以下消息。

到目前为止,我所做的只是一个值:7。声明函数时是否需要放置数组?

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;
        }
    }        
谢谢:)

1 个回复
最合适的回答,由SO网友:Jason Murray 整理而成

我不确定任何数字的错误消息是如何显示的,因为在大多数脚本中,您都使用了替代结构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-更新代码以在错误消息中返回当前产品数。

结束

相关推荐

如何使用另一个文件而不是home.php

我有一个优雅的地产主题,我正在使用多个类别选择来显示一些帖子,结果页面在顶部显示功能幻灯片,我想消除这种情况;我希望它能像Wordpress Search显示结果一样工作(不带功能滑块)。我发现多类别插件正在使用get_bloginfo(\'url\'), 主页,以显示结果。所以我想创建另一个home.php, 但没有滑块;homesearch.php, 但是我如何才能调用此页而不是home.php This 是页面