我想在“我们的游览”页面(子弹“ our-tours-ru”)的woocommerce类别“游览”(子弹“ excursions-ru”)中排除所有产品/旅游。这是this page
我找到了this solution here,所以我在下面使用此代码,但对我来说不起作用。
找不到我的错误在哪里。
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
$new_terms = array();
// if a product category and on the shop page
// to hide from shop page, replace is_page('YOUR_PAGE_SLUG') with is_shop()
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_page('our-tours-ru') ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->slug, array( 'excursions-ru' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
最佳答案
(由于现有答案均不适合您,并且您正在使用子主题,因此我发布了此答案,该答案特定于您当前在Entrada theme上使用的your site。)
正如我所看到的,“我们的游览”页面正在使用“列出全宽(三列网格)”模板,在父主题中,该模板位于entrada/entrada_templates/listing-full-width-3column-grid.php
,并且使用以下模板部分:。
如果打开它,您将看到以下自定义查询:
$args = array(
'post_type' => 'product',
'posts_per_page' => $posts_per_page,
'paged' => 1
);
$args = entrada_product_type_meta_query($args, 'tour' );
$loop = new WP_Query( $args );
“我们的游览”页面上的“主要产品”部分/网格中使用了该标签。
因此,一种简单的方法(可能会起作用)可以使您从该查询中排除“短途旅行”类别,或从该类别中排除产品,方法是将
entrada/template-parts/grid-threecolumn.php
复制到子主题文件夹(即entrada/template-parts/grid-threecolumn.php
),然后您可以根据需要自定义entrada-child-picpic-v1_0/template-parts/grid-threecolumn.php
数组。对于您的问题,请尝试在$args
之前/上方添加以下内容:wp_reset_query(); // Just in case.
if ( is_page( 'our-tours-ru' ) ) {
if ( ! isset( $args['tax_query'] ) ) {
$args['tax_query'] = array();
}
// Excludes products from the "Excursions" category.
$args['tax_query'][] = array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'excursions-ru' ),
'operator' => 'NOT IN',
);
}
注意:与其他答案中使用的
$loop = new WP_Query( $args );
相同,不同的是上面的答案专门用于tax_query
模板(或使用listing-full-width-3column-grid.php
模板的任何其他页面模板)。