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

如何在WordPress Forminator表单提交后获取提交数据?

解决Forminator表单提交后同步数据到其他数据库表的问题

你之前尝试的钩子中,forminator_form_after_save_entry是唯一正确的时机——它会在表单条目完全保存到数据库后触发。之前失败大概率是参数处理、表单ID匹配或字段取值逻辑有问题,以下是可直接复用的解决方案:

完整代码实现

将这段代码添加到主题的functions.php文件,或通过自定义代码插件(如Code Snippets)引入:

add_action( 'forminator_form_after_save_entry', 'sync_forminator_to_custom_table', 10, 4 );
function sync_forminator_to_custom_table( $entry_id, $form_id, $entry_data, $form_settings ) {
    // 仅处理目标表单,替换为你的表单ID(可在表单编辑页面URL中找到)
    $target_form = 123;
    if ( $form_id !== $target_form ) {
        return;
    }

    // 提取提交的字段数据,替换为你的表单实际字段标识(在Forminator字段的「高级」标签下查看Field ID)
    $user_name = isset( $entry_data['meta_data']['user-name']['value'] ) ? sanitize_text_field( $entry_data['meta_data']['user-name']['value'] ) : '';
    $user_email = isset( $entry_data['meta_data']['user-email']['value'] ) ? sanitize_email( $entry_data['meta_data']['user-email']['value'] ) : '';
    $user_phone = isset( $entry_data['meta_data']['user-phone']['value'] ) ? sanitize_text_field( $entry_data['meta_data']['user-phone']['value'] ) : '';

    // 连接数据库(同WordPress库直接用全局$wpdb;外部库需单独配置)
    global $wpdb;
    // 外部库示例:
    // $external_db = new wpdb( 'DB_USER', 'DB_PASS', 'DB_NAME', 'DB_HOST' );

    // 目标表名,替换为你的自定义表名
    $target_table = $wpdb->prefix . 'your_custom_table';

    // 插入数据到目标表
    $wpdb->insert(
        $target_table,
        array(
            'name' => $user_name,
            'email' => $user_email,
            'phone' => $user_phone,
            'created_at' => current_time( 'mysql' )
        ),
        array( '%s', '%s', '%s', '%s' ) // 对应字段的数据类型
    );

    // 可选:记录错误日志用于排查
    if ( $wpdb->last_error ) {
        error_log( 'Forminator数据同步失败: ' . $wpdb->last_error );
    }
}

关键注意事项

  1. 表单ID匹配:必须替换$target_form为你的实际表单ID,避免所有表单提交都触发同步。
  2. 字段标识正确:entry_data['meta_data'][字段标识]['value']中的字段标识,要和Forminator编辑页面中字段的「Field ID」完全一致(比如文本框默认是user-name)。
  3. 数据安全:必须用sanitize_text_field、sanitize_email等函数过滤用户输入,防止SQL注入和XSS攻击。
  4. 错误排查:如果仍失败,开启WP_DEBUG日志(在wp-config.php中设置define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);),查看wp-content/debug.log中的错误信息。

为什么之前的钩子无效

  • forminator_custom_form_after_handle_submit:触发时机在条目保存到数据库之前,无法获取完整的持久化数据。
  • forminator_custom_form_submit_before_set_fields:触发时机过早,此时用户提交的原始数据还未被处理成可用格式。
  • forminator_form_after_save_entry:本身是正确钩子,之前失败多是参数处理逻辑有误(比如未过滤表单ID、字段标识错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:54:36