You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce店铺页面排除可下载产品

解决WooCommerce主存档排除可下载产品的问题

嘿Johannes,刚好我之前处理过类似的需求,用pre_get_posts就能轻松搞定!因为WooCommerce会给可下载产品添加一个名为_downloadable的自定义字段,值为yes,我们只需要在主查询里过滤掉这些产品就行,同时避开你已经设置好的特定可下载产品存档页面。

直接把下面的代码添加到你的主题functions.php文件或者自定义插件里:

add_action( 'pre_get_posts', 'exclude_downloadable_products_from_main_archives' );
function exclude_downloadable_products_from_main_archives( $query ) {
    // 几个关键判断:确保是前台、主查询、产品存档页面,同时排除你的特定可下载存档页面
    if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'product' ) && ! is_page( 'downloadable-products' ) ) {
        // 获取当前已有的元查询(如果有的话)
        $meta_query = $query->get( 'meta_query', array() );
        
        // 添加新的过滤规则:排除_downloadable值为yes的产品
        $meta_query[] = array(
            'key'     => '_downloadable',
            'value'   => 'yes',
            'compare' => '!=',
            'type'    => 'CHAR'
        );
        
        // 更新查询的元设置
        $query->set( 'meta_query', $meta_query );
    }
}

代码关键点说明:

  • ! is_admin():避免影响后台的产品查询,只在前台生效
  • $query->is_main_query():只修改页面的主查询,不会干扰侧边栏或其他自定义查询
  • is_post_type_archive( 'product' ):只针对WooCommerce的产品存档页面
  • ! is_page( 'downloadable-products' ):这里需要替换成你那个特定可下载产品存档页面的slug或者ID,确保该页面不受过滤影响

因为你所有产品都是简单产品,这个代码完全适用,不需要考虑变量产品的子产品情况。如果你的特定存档不是页面,而是自定义分类或其他类型,比如某个产品分类,只需要把! is_page(...)换成! is_tax( 'product_cat', 'downloadable' )(替换成你的分类slug)就行。

测试一下,主产品存档应该就只会显示实体产品,而你的特定页面依然能正常展示可下载产品啦!

内容的提问来源于stack exchange,提问作者Johannes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:47:14