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

如何通过Cron定时触发WooCommerce全商品低库存阈值通知邮件

WooCommerce 定时触发全商品低库存通知实现方案

整个实现完全复用WooCommerce原生通知逻辑,不需要自定义邮件模板,不会和现有店铺规则冲突,分三步落地:

1. 注册12小时Cron执行间隔

WooCommerce/WordPress 默认没有每日两次(12小时间隔)的定时调度规则,先把自定义间隔加进去,把以下代码放到主题functions.php或者自定义插件中:

// 注册12小时定时调度间隔
add_filter('cron_schedules', function($schedules) {
    $schedules['twelve_hourly'] = [
        'interval' => 12 * HOUR_IN_SECONDS,
        'display'  => '每12小时执行一次'
    ];
    return $schedules;
});

2. 挂载库存检测定时任务

注册定时触发点,确保任务不会重复挂载:

// 初始化时检查并挂载定时任务
add_action('init', function() {
    if (!wp_next_scheduled('wc_custom_low_stock_check_event')) {
        wp_schedule_event(time(), 'twelve_hourly', 'wc_custom_low_stock_check_event');
    }
});

// 主题/插件停用时清理定时任务,避免垃圾任务残留
register_deactivation_hook(__FILE__, function() {
    $timestamp = wp_next_scheduled('wc_custom_low_stock_check_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wc_custom_low_stock_check_event');
    }
});

3. 库存检测逻辑(复用原生低库存邮件流程)

不要自己写邮件发送逻辑,直接触发WooCommerce内置的低库存钩子,自动走你后台配置好的通知规则、收件人、邮件模板:

// 绑定定时任务的执行逻辑
add_action('wc_custom_low_stock_check_event', function() {
    // 获取所有上架、开启库存管理的商品(含变体商品)
    $args = [
        'limit' => -1,
        'status' => 'publish',
        'type' => ['simple', 'variable', 'variation'],
        'manage_stock' => true,
        'return' => 'objects'
    ];
    $products = wc_get_products($args);

    foreach ($products as $product) {
        $stock_qty = (int)$product->get_stock_quantity();
        $low_stock_threshold = (int)$product->get_low_stock_amount();
        // 跳过未设置阈值、库存高于阈值的商品
        if ($low_stock_threshold <= 0 || $stock_qty > $low_stock_threshold) {
            continue;
        }
        // 12小时内已经发过通知的商品跳过,避免重复发邮件
        $last_notice_time = (int)get_post_meta($product->get_id(), '_wc_last_low_stock_notice', true);
        if (time() - $last_notice_time < 12 * HOUR_IN_SECONDS) {
            continue;
        }
        // 触发WooCommerce原生低库存动作,自动发送标准通知邮件
        do_action('woocommerce_low_stock', $product);
        // 记录本次通知时间
        update_post_meta($product->get_id(), '_wc_last_low_stock_notice', time());
    }
});

关键注意事项

  • 如果你需要更稳定的定时触发,不要依赖WordPress自带的伪Cron(需要有人访问网站才会执行),可以在wp-config.php里加define('DISABLE_WP_CRON', true);禁用伪Cron,然后在服务器Crontab里加如下命令,用系统级定时任务触发:
    0 */12 * * * wget -q -O - https://你的店铺域名/wp-cron.php?doing_wp_cron >/dev/null 2>&1
    
  • 测试时可以临时把调度间隔改成1分钟(把12 * HOUR_IN_SECONDS改成60,Crontab对应规则也改成每分钟执行),找个测试商品把库存调到低于阈值,验证邮件能正常收到后再改回12小时间隔。
  • 代码不需要做额外兼容,只要你后台已经配置好低库存通知的收件人、邮件模板,触发后会完全按照现有配置发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:27:47