以编程方式隐藏Woocommerce产品

时间:2017-06-23 05:54:17

标签: wordpress woocommerce hook

我想在类别页面上有条件地隐藏一组Woocommerce产品,具体取决于当前的购物车内容。我有一个名为盒子的类别,有四种产品。其中两个也属于纸板类,两个属于塑料类。

如果ID为23的产品已经在购物车中,我想展示塑料盒。如果不是,我想隐藏它们。我知道如何查看购物车内容,但是一旦我得到了答案,我该如何从该页面隐藏塑料类别的产品?

add_action( 'woocommerce_before_shop_loop', 'my_before_shop_loop' );

function my_before_shop_loop() {
    global $woocommerce;

    $flag = 0;

    foreach($woocommerce->cart->get_cart() as $key => $val ) {
        $_product = $val['data'];

        if ($_product->id == '23') {
            $flag = 1;
        }
    }

    if ($flag == 0) {

        // hide products that are in the plastic category
        // this is where I need help

    }
}

1 个答案:

答案 0 :(得分:2)

您正在使用的钩子在从数据库中获取产品后触发。您可以从查询本身过滤产品。在下面的代码中,您可以传递要隐藏在前端的产品。

    function custom_pre_get_posts_query( $q ) {

        // Do your cart logic here

        // Get ids of products which you want to hide
        $array_of_product_id = array();

        $q->set( 'post__not_in', $array_of_product_id );

    }
    add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );