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

如何实现WordPress插件中表单提交后隐藏

解决WordPress插件表单提交后无法隐藏的问题

你的代码之所以检测不到submitForm的POST参数,核心问题有两个:

  • 表单提交目标是外部的sendmail.php,提交后请求跳转到该文件,当前插件页面完全接收不到POST数据,isset($_POST['submitForm'])自然永远为false。
  • 没有持久化存储用户已提交的状态,就算能拿到POST值,页面刷新后状态也会丢失。

下面是修正后的完整实现方案:

1. 注册表单提交处理钩子

在插件主类的构造函数或初始化方法中添加以下代码,用于接收表单提交请求:

add_action('admin_post_save_mister_chat_info', array($this, 'handle_form_submission'));
add_action('admin_post_nopriv_save_mister_chat_info', array($this, 'handle_form_submission')); // 可选:处理未登录用户场景

2. 添加表单提交处理方法

实现接收、验证、存储用户提交数据的逻辑:

public function handle_form_submission() {
    // 安全验证:检查nonce防止CSRF攻击
    if (!isset($_POST['mister_chat_nonce']) || !wp_verify_nonce($_POST['mister_chat_nonce'], 'mister_chat_form_action')) {
        wp_die('安全验证失败,请重试。');
    }

    // 验证并清洗用户输入
    $user_data = array(
        'vnaam' => sanitize_text_field($_POST['vnaam']),
        'anaam' => sanitize_text_field($_POST['anaam']),
        'bnaam' => sanitize_text_field($_POST['bnaam']),
        'email' => sanitize_email($_POST['email']),
        'telef' => sanitize_text_field($_POST['telef'])
    );

    // 保存用户数据到WordPress系统选项
    update_option('mister_chat_user_info', $user_data);
    // 标记用户已完成表单提交
    update_option('mister_chat_form_submitted', true);

    // 重定向回插件设置页面,避免刷新重复提交
    wp_redirect(admin_url('admin.php?page=' . $this->plugin_name));
    exit;
}

3. 修改页面渲染方法

更新display_plugin_setup_page,通过系统选项判断用户是否已提交表单:

public function display_plugin_setup_page() {
    // 从系统选项中读取提交状态
    $form_submitted = get_option('mister_chat_form_submitted', false);

    if ($form_submitted) {
        ?>
        <form action="options.php" method="post">
            <?php
            settings_fields('mister_chat_options');
            do_settings_sections($this->plugin_name); ?>
            <input name="submit" class="button button-primary" type="submit" value="<?php esc_attr_e('Save'); ?>" />
        </form>
        <?php
    } else {
        ?>
        <form method="post" action="<?php echo admin_url('admin-post.php'); ?>">
            <!-- 指定表单提交的处理动作 -->
            <input type="hidden" name="action" value="save_mister_chat_info">
            <!-- 添加安全验证nonce -->
            <?php wp_nonce_field('mister_chat_form_action', 'mister_chat_nonce'); ?>
            
            <fieldset>
                <input placeholder="Voornaam" type="text" id="vnaam" name="vnaam" required>
            </fieldset>
            <fieldset>
                <input placeholder="Achternaam" type="text" id="anaam" name="anaam" required>
            </fieldset>
            <fieldset>
                <input placeholder="Bedrijfsnaam" type="text" id="bnaam" name="bnaam">
            </fieldset>
            <fieldset>
                <input placeholder="E-mailadres" type="email" id="email" name="email" required>
            </fieldset>
            <fieldset>
                <input placeholder="Telefoonnummer" type="tel" id="telef" name="telef">
            </fieldset>
            <fieldset>
                <input type="submit" name="submitForm" id="contact-submit" data-submit="...Verzenden" value="提交">
            </fieldset>
        </form>
        <?php
    }
}

关键修改说明

  • 抛弃了指向外部文件的提交方式,改用WordPress官方的admin-post.php统一处理表单请求,符合插件开发规范。
  • 添加了nonce安全验证,避免恶意请求。
  • 使用WordPress的update_option和get_option持久化存储提交状态,确保页面刷新后依然能正确判断用户是否已提交。
  • 提交完成后执行重定向,解决表单重复提交问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:50:29