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

隐藏WooCommerce缺货商品后页面仍留空白问题求助

解决WooCommerce隐藏缺货商品后出现空白位置/空白分页的问题

你当前用woocommerce_product_is_visible过滤器的问题在于:这个钩子只是在查询出商品后,控制单个商品是否显示,但分页逻辑是基于原始查询的商品总数,所以那些被隐藏的缺货商品依然被算进了分页计数里,导致末尾出现空白页;而商店/分类页面的布局是按查询结果的数量渲染位置,隐藏商品后自然会留下空白。

正确的做法是直接修改产品查询,从数据库层面排除不需要的缺货商品,这样分页和布局都会基于实际要显示的商品数量,不会出现空白问题。替换你原来的代码,改用下面的实现:

add_action( 'pre_get_posts', 'exclude_out_of_stock_except_restock_attribute' );
function exclude_out_of_stock_except_restock_attribute( $query ) {
    // 只针对前台的产品查询生效,后台不受影响
    if ( ! is_admin() && $query->is_main_query() && ( is_shop() || is_product_category() || is_product_tag() ) ) {
        // 构建元查询:排除缺货且没有"Only with restock"属性的商品
        $query->set( 'meta_query', array(
            'relation' => 'OR',
            // 条件1:商品有库存
            array(
                'key'     => '_stock_status',
                'value'   => 'instock',
                'compare' => '=',
            ),
            // 条件2:商品缺货,但带有指定属性
            array(
                'relation' => 'AND',
                array(
                    'key'     => '_stock_status',
                    'value'   => 'outofstock',
                    'compare' => '=',
                ),
                array(
                    'key'     => 'pa_availability',
                    'value'   => 'Only with restock',
                    'compare' => '=',
                ),
            ),
        ) );
    }
}

代码说明:

  • 使用pre_get_posts钩子在查询执行前修改参数,直接从数据库筛选符合条件的商品,避免后续隐藏操作带来的分页和布局问题。
  • 元查询分两个分支:要么商品有库存,要么商品缺货但带有pa_availability属性且值为Only with restock。
  • 限制只在前台的商店、分类、标签页面的主查询生效,不会影响后台的产品管理。

额外注意:

如果你的商品是变量产品,需要确保pa_availability属性设置在父产品上,或者调整代码来检查子产品的库存和属性(如果属性是在子产品上的话)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:54:22