如何将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
相关产品推荐
相关产品推荐

