我想在“我们的游览”页面(子弹“ 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模板的任何其他页面模板)。

08-07 23:40