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

WordPress验证跳转表单开发:表单逻辑调用异常问题

问题修复:WordPress自定义表单验证逻辑不触发

你的核心问题是表单提交后验证逻辑未正确执行,同时错误提示的输出方式不符合WordPress页面渲染流程。以下是修正后的完整代码及关键说明:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
/*
Plugin Name: Custom Form Handler
Description: Handles the custom form submission.
*/

// 启动会话用于存储错误信息
function custom_form_start_session() {
    if (!session_id()) {
        session_start();
    }
}
add_action('init', 'custom_form_start_session');

function custom_form_handler() {
    // 只处理POST提交,且匹配表单专属提交标识
    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['street_name_submit'])) {
        // 用页面slug判断更可靠,替换为你实际的Members Only页面slug
        if (is_page('members-only')) {
            $streetName = sanitize_text_field($_POST['street_name']);

            if ($streetName === "Broadway") {
                wp_redirect(site_url('/membersonly-success/'));
                exit();
            } else {
                // 存储错误信息到会话
                $_SESSION['form_error'] = "Invalid street name.";
                // 重定向回原页面,避免表单重复提交
                wp_redirect(get_permalink());
                exit();
            }
        }
    }
}
// 改用init钩子处理提交,时机更稳定
add_action('init', 'custom_form_handler');

function display_form() {
    ob_start();
    // 显示错误信息(存在则输出并清除)
    if (isset($_SESSION['form_error'])) {
        echo '<p style="color:red;">' . esc_html($_SESSION['form_error']) . '</p>';
        unset($_SESSION['form_error']);
    }
    ?>
    <form method="POST">
        Street Name <input type="text" name="street_name" required><br/>
        <!-- 自定义提交按钮name,避免与其他表单冲突 -->
        <input type="submit" name="street_name_submit" value="Go">
    </form>
    <?php
    return ob_get_clean();
}

function custom_form_shortcode() {
    return display_form();
}

add_shortcode('custom_form', 'custom_form_shortcode');

关键修改说明:

  • 钩子调整:将template_redirect替换为init钩子,确保表单提交逻辑在页面渲染前稳定执行,解决原钩子时机导致的页面判断失效问题。
  • 错误信息处理:放弃直接echo的方式,改用会话存储错误内容,在表单渲染时输出,避免破坏页面结构。
  • 防重复提交:验证失败后重定向回原页面,避免用户刷新重复提交表单。
  • 表单标识优化:给提交按钮设置专属name,防止与其他页面表单的提交按钮冲突。
  • 页面判断优化:用页面slug代替标题判断,避免标题大小写、空格或翻译带来的匹配失败。
  • 代码复用:短代码直接调用display_form函数,消除重复的表单代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:47:03