仅显示Woocommerce中的分组产品

时间:2018-10-01 15:14:03

标签: php wordpress woocommerce product custom-taxonomy

在Woocommerce中,由于服装尺寸的库存sku问题,我们为最终同一产品提供了两种不同的产品。我们将其称为一件蓝色衬衫,但由于订购决定,这是我们商店中的2种不同产品。我创建了一个分组的产品来处理此显示。
但是,我似乎无法在商店中隐藏链接的产品。当我使用WC_Product_query类和get_products函数时,似乎没有返回所有要查询的46种产品。我想知道到底是什么原因,我做错了,和/或是否有更好的解决方案。

在我的functions.php子主题中放置以下内容:

add_action( 'woocommerce_product_query', 'only_grouped_products_query' );
function only_grouped_products_query( $q ) {
    $query = new WC_Product_Query(array($q));   

    $products = $query->get_products();

    $linked_array = array();
    $i = 0;
    foreach($products as $product){     
        $i++;
        /*
        echo $product->get_name() .' - ' . $product->product_type .'<br>';
        $is_grouped = $product->product_type;
        if ( $is_grouped == 'grouped' )
        {
            // echo $product->get_name() .' - ' . $product->product_type;
            $get_child_id = $product->get_children();
            if (is_array($get_child_id)){
                foreach($get_child_id as $child_id){
                    $linked_array[] = $child_id;
                }
            } else {
                $linked_array[] = $get_child_id;
            }
        }
        */
    }
    echo $i;
    // $q->set( 'post__not_in', $linked_array );
}

上面的代码片段确实起作用,但是当我转储原始的$ query变量时,它不会提取查询显示的全部46个结果。 $ i仅返回10个结果。

1 个答案:

答案 0 :(得分:2)

您的问题正文解释不太清楚...因此,我将此答案基于您的问题标题。

由于Woocommerce中的产品类型由product_type自定义分类法处理,因此您需要使用税收查询

以下代码将在所有Woocommerce存档页面上仅显示分组的产品类型:

add_filter( 'woocommerce_product_query_tax_query', 'only_grouped_products', 20, 1 );
function only_grouped_products( $tax_query ){
    $tax_query[] = array(
        'taxonomy'  => 'product_type',
        'field'     => 'name',
        'terms'     => array('grouped'),
    );
    return $tax_query;
}

代码进入您的活动子主题(活动主题)的function.php文件中。经过测试,可以正常工作。


Woocommerce默认产品类型(以及其他自定义产品类型)

因此您可以处理任何产品类型:

  • 对于简单产品,您将使用:'terms' => array('simple'),
  • 对于可变产品,您将使用:'terms' => array('variable'),
  • 对于分组产品,您将使用:'terms' => array('grouped'),
  • 对于外部产品,您将使用:'terms' => array('external'),

还有所有这些自定义产品类型(来自已知的第三方插件):

  • 对于复合产品,您将使用:'terms' => array('composite'),
  • 对于简单订阅产品,您将使用:'terms' => array('subscriptions'),
  • 对于可变订阅产品,您将使用:'terms' => array('Variable Subscription'),
  • 对于 Booking 产品,您将使用:'terms' => array('booking'),
  

您也可以组合多种产品类型,例如仅作为简单和分组产品类型:
  您将使用:'terms' => array('simple', 'grouped'),…等等。