从 Woocommerce 的商店页面中排除可下载产品

Exclude downloadable products from shop pages in Woocommerce

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

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

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

如有任何帮助,我们将不胜感激!

您可以使用专用的 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 文件。已测试并有效。

To display only downloadable products you will use 'compare' => '=', instead…