【问题标题】:Exclude downloadable products from shop pages in Woocommerce从 Woocommerce 的商店页面中排除可下载的产品
【发布时间】:2026-01-24 12:30:01
【问题描述】:

我正在开发一个包含实体产品和可下载产品的 Woocommerce 商店。我想更改循环的标准查询以排除所有可下载的产品,但我想不出办法。我希望这些产品只显示在某个存档页面上,这是没有问题的。

我正在使用 pre_get_post 对查询进行一些其他更改,但我似乎找不到可下载产品的选项。

我所有的产品都是简单的产品。

任何帮助将不胜感激!

【问题讨论】:

    标签: php wordpress woocommerce metadata product


    【解决方案1】:

    您可以使用专用的woocommerce_product_query Woocommerce 操作挂钩,而不是使用pre_get_post。但由于可下载产品与元查询相关,最好使用woocommerce_product_query_meta_query Woocommerce 专用过滤器挂钩。

    它只会从商店页面中删除可下载的产品:

    add_filter( 'woocommerce_product_query_meta_query', 'downloadable_not_in_shop', 20, 2 );
    function downloadable_not_in_shop( $meta_query, $query ) {
        // Only on archive pages
        if( is_admin() || ! is_shop() )
            return $meta_query; // exit
    
        $meta_query[] = array(
            'key'     => '_downloadable',
            'value'   => 'yes',
            'compare' => '!=',
        );
    
        return $meta_query;
    }
    

    代码进入您的活动子主题(或主题)的 function.php 文件中。经过测试并且可以工作。

    要仅显示可下载的产品,您将使用 'compare' => '=',...

    【讨论】: