WooCommerce 在父类别中排除子类别中的产品
Posted
技术标签:
【中文标题】WooCommerce 在父类别中排除子类别中的产品【英文标题】:WooCommerce exclude products from child category in parent category 【发布时间】:2021-01-13 13:59:17 【问题描述】:我尝试在 WooCommerce 中实现的目标: 我有许多带有子类别(例如高跟鞋、穆勒鞋、坡跟鞋)的类别(例如鞋子)。所有标准鞋只属于父类,少数特殊鞋(如高跟鞋、穆勒鞋和坡跟鞋)只属于子类。
如果用户打开“鞋子”类别,我只想显示当前类别中的产品(而不是子类别中的产品)。
到目前为止我所做的尝试 我搜索了很多并尝试了许多不同的方法,但没有机会。
方法一: as seen here
function exclude_product_cat_children( $wp_query )
if ( isset( $wp_query->query_vars['product_cat'] ) && $wp_query->is_main_query() )
$wp_query->set(
'tax_query', array( array (
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => $wp_query->query_vars['product_cat'],
'include_children' => false
) )
);
add_filter('pre_get_posts', 'exclude_product_cat_children', 99);
方法 #2: as seen here
add_filter( 'parse_tax_query', 'cyb_do_not_include_children_in_company_category_archive' );
function cyb_do_not_include_children_in_company_category_archive( $query )
if (
! is_admin()
&& $query->is_main_query()
&& $query->is_tax( 'shoes' )
)
$query->tax_query->queries[0]['include_children'] = 0;
我真的不知道如何解决这个问题。似乎这两种方法对所有人都有效——只是不适合我。有什么想法吗?
谢谢!
【问题讨论】:
您应该重新访问您的类别设置...编辑类别时,您可能需要更改“显示类型”选项... 显示类型仅为产品。我尝试了所有选项,但仍然无法正常工作:( 【参考方案1】:我终于自己找到了解决方案。希望我可以用下面的代码帮助别人。
代码是干什么用的? 我在当前(父)类别中隐藏子类别中的所有产品。
function change_parent_category_query($query)
if( ! is_admin() && $query->query_vars['post_type'] == 'product')
global $wpdb;
$parent_id = get_queried_object()->term_id;
if( isset($parent_id) && is_numeric($parent_id) )
$all_subcategory_ids = $wpdb->get_results( $wpdb->prepare( "SELECT term_taxonomy_id FROM $wpdb->prefixterm_taxonomy WHERE taxonomy = 'product_cat' AND parent = %d", $parent_id ) );
$list_ids = array();
foreach( $all_subcategory_ids as $asi )
$list_ids[] = esc_attr( $asi->term_taxonomy_id );
$tax_query = $query->get( 'tax_query' );
$tax_query[] = array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'parent' => 0,
'terms' => $list_ids,
'operator' => 'NOT IN'
);
$query->set( 'tax_query', $tax_query );
add_action( 'pre_get_posts', 'change_parent_category_query' );
【讨论】:
以上是关于WooCommerce 在父类别中排除子类别中的产品的主要内容,如果未能解决你的问题,请参考以下文章
在 WooCommerce 子类别存档页面上显示子子类别术语列表
WooCommerce - 使用永久链接和 html 显示来自特定父级的产品子类别
从产品类别中排除最近查看的产品小部件中的 Woocommerce 产品
从 WooCommerce 中的类别价格后缀更改中排除特定产品 ID