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

基于特定日期的WordPress Contact Form 7重定向及中奖判定方案

WordPress表单提交后按特定日期判定跳转的实现方案

需求背景

  • 使用Contact Form 7搭建表单,通过Post My CF7 Form插件将提交数据保存到自定义文章类型(CPT)
  • 核心规则:预设13个每周固定的「中奖时刻」,在每个时刻之后,第一个提交表单的用户跳转至「PRIZE」页面;其余用户(包括该时刻之后的非首提交用户、未到中奖时刻的用户)跳转至「KEEP TRYING」页面,直到下一个中奖时刻到来

原方案问题

最初尝试纯前端JavaScript方案,但存在两个致命问题:

  • 前端逻辑可被篡改,无法保证规则的公平性
  • 无法持久化记录「中奖名额是否已使用」的状态,刷新页面后状态重置

ACF解决方案

通过Advanced Custom Fields(ACF)实现状态持久化与后端判断,具体步骤如下:

1. 配置ACF选项页与字段

  • 创建一个ACF选项页(命名如「抽奖配置」),用来管理所有中奖时刻
  • 添加重复字段(字段键:pv_opt_moments),包含两个子字段:
    • pv_opt_moment_date:日期时间字段,用来设置每周的中奖时刻(精确到时分)
    • pv_opt_moment_used:布尔字段(或复选框),标记该中奖时刻是否已被使用(默认值为「未使用」)

2. 编写PHP逻辑处理跳转与状态更新

将以下代码添加到主题的functions.php文件或自定义插件中,监听CF7表单提交事件并执行判断:

add_action('wpcf7_mail_sent', 'cf7_submission_redirect_based_on_prize_moment');
function cf7_submission_redirect_based_on_prize_moment($contact_form) {
    // 获取选项页中的所有中奖时刻配置
    $prize_moments = get_field('pv_opt_moments', 'option');
    if (empty($prize_moments)) {
        // 无配置时默认跳转到未中奖页面
        wp_redirect(home_url('/keep-trying/'));
        exit;
    }

    $current_timestamp = current_time('timestamp');
    $redirect_to_prize = false;
    $updated_moments = $prize_moments;

    // 遍历查找当前可用的中奖时刻
    foreach ($updated_moments as $index => $moment) {
        $moment_timestamp = strtotime($moment['pv_opt_moment_date']);
        $is_moment_used = $moment['pv_opt_moment_used'];

        // 判断条件:当前时间已过中奖时刻,且该时刻未被使用
        if ($current_timestamp > $moment_timestamp && !$is_moment_used) {
            // 标记该时刻为已使用
            $updated_moments[$index]['pv_opt_moment_used'] = true;
            $redirect_to_prize = true;
            break; // 仅处理第一个符合条件的时刻
        }
    }

    // 更新ACF配置并执行跳转
    if ($redirect_to_prize) {
        update_field('pv_opt_moments', $updated_moments, 'option');
        wp_redirect(home_url('/prize/'));
    } else {
        wp_redirect(home_url('/keep-trying/'));
    }
    exit;
}

3. 注意事项

  • 确保Post My CF7 Form插件已正确配置,表单数据能正常保存到目标CPT
  • 代码中的页面路径(/prize/、/keep-trying/)需替换为站点实际的页面slug
  • 测试时可临时调整中奖时刻为当前时间附近,验证跳转逻辑与状态更新是否正常
  • 若需要重置某个中奖时刻的使用状态,直接在ACF选项页修改对应字段即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:50:52