You need to enable JavaScript to run this app. 如何在WooCommerce商店页面隐藏缺货已满10天的产品
优惠活动
大模型
产品
解决方案
定价
更多

如何在WooCommerce商店页面隐藏缺货已满10天的产品

WooCommerce原生未提供产品缺货时长的存储字段,你需要先自定义字段存储缺货起始时间,再结合查询条件实现隐藏逻辑,完整实现方案如下:

步骤1:实现缺货时间存储逻辑

通过监听WooCommerce库存状态变更钩子,在产品标记为缺货时写入当前时间戳,产品恢复库存时清空该字段:

// 监听产品库存状态变更,记录/清空缺货起始时间
add_action( 'woocommerce_product_set_stock_status', 'custom_record_oos_time', 10, 3 );
function custom_record_oos_time( $product_id, $stock_status, $product ) {
    if ( $stock_status === 'outofstock' ) {
        // 产品标记为缺货时写入当前时间戳
        update_post_meta( $product_id, '_oos_start_time', time() );
    } else {
        // 产品恢复库存时删除缺货时间字段
        delete_post_meta( $product_id, '_oos_start_time' );
    }
}

如果需要兼容可变产品的库存状态变更,可以额外补充监听woocommerce_variation_set_stock_status钩子,逻辑和上述函数一致即可。

步骤2:修改产品查询,隐藏缺货满10天的产品

你原有代码中嵌套新WP_Query查询全量缺货ID的写法会产生额外数据库查询,性能损耗较大,直接修改当前查询的meta条件即可:

add_action( 'woocommerce_product_query', 'custom_hide_oos_over_10days', 10, 1 );
function custom_hide_oos_over_10days( $query ) {
    // 仅在前台商店主查询生效,可根据需求调整生效条件
    if ( ! is_admin() && $query->is_main_query() ) {
        // 获取当前meta_query,避免覆盖原有条件
        $meta_query = $query->get( 'meta_query' ) ?: [];
        
        // 追加排除条件:要么不是缺货,要么缺货但未满10天
        $meta_query[] = [
            'relation' => 'OR',
            // 有货的产品正常展示
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '!=',
            ],
            // 缺货但没有记录起始时间的(旧数据)正常展示,可按需调整
            [
                'key'     => '_oos_start_time',
                'compare' => 'NOT EXISTS',
            ],
            // 缺货但时长不满10天的正常展示
            [
                'key'     => '_oos_start_time',
                'value'   => time() - 10 * DAY_IN_SECONDS, // DAY_IN_SECONDS是WP原生常量,等于86400
                'compare' => '>',
                'type'    => 'NUMERIC'
            ]
        ];

        $query->set( 'meta_query', $meta_query );
    }
}

补充说明

如果需要处理代码上线前已经处于缺货状态的旧产品,可以写一次性执行的批量脚本,给现有缺货产品统一初始化_oos_start_time字段值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 23:27:07