从 Woocommerce 的商店页面中排除产品类别

Excluding product categories from shop page in Woocommerce

我正在尝试从我的产品类别菜单中隐藏一个产品类别。

    add_filter( 'woocommerce_product_categories_widget_args', __NAMESPACE__ . '\rv_exclude_wc_widget_categories' );
    function rv_exclude_wc_widget_categories( $cat_args ) {
        $cat_args['exclude'] = array('129'); // Insert the product category IDs you wish to exclude
        $includes = explode(',', $cat_args['include']); 
        $cat_args['include'] = array_diff($includes,$cat_args['exclude']);
        return $cat_args;
    }

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-1, -129' );
    }
}
add_action( 'pre_get_posts', 'exclude_category' );

我的代码的 top 函数成功地从我的菜单中隐藏了实际上在一个类别中的类别。但是,它不会将其隐藏在主商店页面中。这就是我尝试使用底部代码进行的操作,但是,这似乎没有任何作用。

关于如何做到这一点有什么想法吗?代码放在我的 functions.php 文件中。

编辑:试图澄清我的问题。

第一次打开我的产品页面时,我的菜单中隐藏了类别 'TEST',如下所示。

但是,当我点击一个产品或类别时,菜单会返回到如下显示。

对于您的第一个功能(从小部件隐藏特定产品类别)

add_filter( 'woocommerce_product_categories_widget_args', 'exclude_product_categories_widget', 10, 1 );
function exclude_product_categories_widget( $list_args ) {
    $categories = array('129');

    if(isset( $list_args['include'])):
        $included_ids =  explode( ',', $list_args['include'] );
        $included_ids = array_unique( $included_ids );
        $included_ids = array_diff ( $included_ids, $categories );

        $list_args['include'] = implode( ',', $included_ids);
    else:
        $list_args['exclude'] = $categories;
    endif;

    return $list_args;
}

要在商店和存档页面中排除产品类别 (术语 ID) 129 下的产品,请使用以下专用Woocommerce 挂钩函数:

add_filter('woocommerce_product_query_tax_query', 'exclude_product_category_in_tax_query', 10, 2 );
function exclude_product_category_in_tax_query( $tax_query, $query ) {
    if( is_admin() ) return $tax_query;

    // HERE Define your product categories Terms IDs to be excluded
    $terms = array( 129 ); // Term IDs

    // The taxonomy for Product Categories custom taxonomy
    $taxonomy = 'product_cat';

    $tax_query[] = array(
        'taxonomy' => $taxonomy,
        'field'    => 'term_id', // Or 'slug' or 'name'
        'terms'    => $terms,
        'operator' => 'NOT IN', // Excluded
        'include_children' => true // (default is true)
    );

    return $tax_query;
}

代码进入您的活动子主题(或主题)的 function.php 文件。 已测试并有效。