WP / Elementor拦截表并使用数据重定向

时间:2018-10-12 22:07:16

标签: wordpress woocommerce wordpress-hook elementor

我有一个内置于Elementor中的表单,我希望进行拦截,处理数据并转发给第三方,然后在“确认”卡上显示该数据。

我能够将整个过程构建为一个页面,使用CSS将每个页面设置为不显示,然后在收到AJAX响应时使用JS显示/隐藏。这是不理想的,因为它会随着JS的关闭而中断。

我找不到合适的Elementor钩子以及用PHP填充新页面的方法,有人对此有经验吗?

1 个答案:

答案 0 :(得分:0)

有几种方法可以将数据从Elementor Web表单发布到另一个URL。

一个人正在使用许多API集成,例如Mailchimp,ActiveCampaign,Zapier等(请参见https://docs.elementor.com/article/281-form-faq和(https://docs.elementor.com/category/405-integrations

另一种方法(非常有限的方法)是在“提交”之后使用表单的“动作”并选择“重定向”,然后将每个字段的短代码用作URL中的各个数据字符串,例如:

mysite.com/thank-you?fname= [字段id =“ fname”]&lname = [字段id =“ lname”]

您甚至可以在Elementor中构建/ thank-you /页面以获取该数据,并使用表单字段数据填充Elementor元素,例如文本,标题,链接等。例如,我可以在/ thank-you /页面上放置一个文本元素,然后选择动态而不是在文本区域中键入内容,然后从动态下拉列表中选择“请求参数”,为“类型”选择GET并为参数名称使用您唯一的url键,例如fname,lname等。您甚至可以同时设置前缀,后缀和后备文本。

最后,这是有关如何后端代码向外部传递数据(https://developers.elementor.com/forms-api/#Form_New_Record_Action)的文章。

// A send custom WebHook
add_action( 'elementor_pro/forms/new_record', function( $record, $handler ) {
    //make sure its our form
    $form_name = $record->get_form_settings( 'form_name' );

    // Replace MY_FORM_NAME with the name you gave your form
    if ( 'MY_FORM_NAME' !== $form_name ) {
        return;
    }

    $raw_fields = $record->get( 'fields' );
    $fields = [];
    foreach ( $raw_fields as $id => $field ) {
        $fields[ $id ] = $field['value'];
    }

    // Replace HTTP://YOUR_WEBHOOK_URL with the actuall URL you want to post the form to
    wp_remote_post( 'HTTP://YOUR_WEBHOOK_URL', [
        'body' => $fields,
    ]);
}, 10, 2 );

还有一个包含更多示例的线程,这些线程使用该模板作为引物(https://github.com/elementor/elementor/issues/2397)与不同的API集成