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

如何在WooCommerce预订开始前15分钟执行PHP代码

解决方案:WooCommerce预订开始前15分钟执行PHP代码

1. 核心思路

依靠定时任务(Cron)每隔15/30分钟触发检查脚本,筛选出距离开始时间15分钟以内且未执行过触发操作的有效预订订单,执行目标业务代码后标记已处理,避免重复触发。

2. 具体实现步骤

步骤1:注册定时任务

在主题functions.php或自定义插件中添加以下代码,注册定时触发的钩子:

// 注册定时任务
add_action('wp', 'register_booking_pre_check_cron');
function register_booking_pre_check_cron() {
    if (!wp_next_scheduled('wc_booking_pre_start_trigger')) {
        // 每隔15分钟执行一次,需30分钟则改为 '*/30 * * * *'
        wp_schedule_event(time(), '*/15 * * * *', 'wc_booking_pre_start_trigger');
    }
}

// 绑定定时任务的执行函数
add_action('wc_booking_pre_start_trigger', 'run_booking_pre_start_code');

步骤2:编写检查与执行逻辑

实现预订筛选、代码执行和重复防护逻辑:

function run_booking_pre_start_code() {
    global $wpdb;

    // 计算时间区间:当前时间到15分钟后
    $now = current_time('mysql');
    $fifteen_minutes_ahead = date('Y-m-d H:i:s', strtotime('+15 minutes'));

    // 查询符合条件的预订:已支付/确认状态、15分钟内开始、未执行过代码
    $target_bookings = $wpdb->get_results($wpdb->prepare("
        SELECT b.id, b.order_id, b.start_date
        FROM {$wpdb->prefix}wc_bookings b
        JOIN {$wpdb->prefix}posts p ON b.order_id = p.ID
        WHERE b.start_date BETWEEN %s AND %s
        AND p.post_status IN ('wc-completed', 'wc-processing')
        AND NOT EXISTS (
            SELECT meta_id FROM {$wpdb->prefix}postmeta
            WHERE post_id = b.id
            AND meta_key = '_pre_start_code_done'
            AND meta_value = '1'
        )
    ", $now, $fifteen_minutes_ahead));

    if (!empty($target_bookings)) {
        foreach ($target_bookings as $booking) {
            // --------------------------
            // 在这里插入你需要执行的PHP代码
            // 示例:发送提醒邮件、调用第三方接口、更新订单数据等
            // 可通过 $booking->order_id 获取关联订单ID,$booking->id 获取预订ID
            // --------------------------

            // 标记该预订已处理,防止重复触发
            update_post_meta($booking->id, '_pre_start_code_done', '1');
        }
    }
}

步骤3:保障定时任务正常运行

  • 若主机禁用了WP Cron,可联系服务商开启,或设置系统级Cron替代,示例命令(每隔15分钟触发):
    */15 * * * * php /你的网站根目录路径/wp-cron.php > /dev/null 2>&1
    
  • 可安装WP Crontrol插件,直观查看和管理定时任务的运行状态。

3. 关键注意事项

  • 时区统一:使用WordPress的current_time('mysql')获取时间,避免和WooCommerce预订存储的时间出现时区偏差。
  • 状态适配:根据业务需求调整查询中的订单状态(比如仅处理wc-completed已完成订单)。
  • 性能优化:若预订量较大,可在SQL查询中添加合理的限制条件,避免单次查询数据过多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:40:29