【问题标题】: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' => '=',...