在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个结果。
答案 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文件中。经过测试,可以正常工作。
因此您可以处理任何产品类型:
'terms' => array('simple'),
'terms' => array('variable'),
'terms' => array('grouped'),
'terms' => array('external'),
还有所有这些自定义产品类型(来自已知的第三方插件):
'terms' => array('composite'),
'terms' => array('subscriptions'),
'terms' => array('Variable Subscription'),
'terms' => array('booking'),
您也可以组合多种产品类型,例如仅作为简单和分组产品类型:
您将使用:'terms' => array('simple', 'grouped'),
…等等。