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

如何将Elementor表单数据通过Webhook传递至WordPress短代码?

解决Elementor表单提交后创建自定义文章时数据传递问题

你的核心问题是短代码的运行逻辑和表单提交的数据流不匹配:短代码是在页面加载时解析执行的,而Elementor表单的提交数据是通过HTTP POST请求传递的,根本不会作为短代码的$atts参数传入。所以用短代码接收表单数据的思路从一开始就错了,应该改用Elementor表单的专属钩子来处理提交事件。

修正后的实现代码

直接替换你现有的短代码函数,用Elementor Pro表单的钩子来处理:

add_action( 'elementor_pro/forms/new_record', 'create_tilmeldinger_post_from_elementor_form', 10, 2 );

function create_tilmeldinger_post_from_elementor_form( $record, $handler ) {
    // 获取表单提交的所有字段数据
    $fields = $record->get( 'fields' );
    
    // 从字段中提取姓名和邮箱(注意:这里的键要和你Elementor表单里的字段ID完全一致)
    $name = isset( $fields['name']['value'] ) ? $fields['name']['value'] : '';
    $email = isset( $fields['email']['value'] ) ? $fields['email']['value'] : '';

    // 验证必要字段是否存在
    if ( empty( $email ) ) {
        return; // 邮箱为空则不创建文章
    }

    // 准备自定义文章的参数
    $new_post_args = array(
        'post_title'    => sanitize_text_field( $email ), // 可改成姓名+邮箱组合
        'post_content'  => sprintf( '姓名:%s<br>邮箱:%s', sanitize_text_field( $name ), sanitize_email( $email ) ),
        'post_type'     => 'tilmeldinger',
        'post_status'   => 'publish',
        'post_author'   => get_current_user_id() ?: 1, // 默认用管理员ID
    );

    // 插入自定义文章
    $post_id = wp_insert_post( $new_post_args );

    // 可选:将表单数据存储为自定义字段
    if ( $post_id && ! is_wp_error( $post_id ) ) {
        update_post_meta( $post_id, 'tilmelding_name', $name );
        update_post_meta( $post_id, 'tilmelding_email', $email );
    }
}

关键注意事项

  • 字段ID匹配:代码里的'name'和'email'必须和你Elementor表单中设置的字段ID完全一致(可在表单编辑器的字段设置面板查看)。
  • 权限检查:确保表单提交时的执行用户(通常是访客)拥有创建tilmeldinger自定义文章的权限,必要时可调整自定义文章类型的权限配置,或在插入文章前临时提升权限。
  • 数据安全:必须用WordPress的sanitize系列函数处理用户输入,避免XSS攻击或数据库注入风险。
  • 清理旧代码:之前的[my_elementor_test]短代码可直接删除,不再需要。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 04:37:53