Use Contact Form 7 with Ajax

时间:2017-04-28 作者:Amran

我在wordpress中为表单和ajax制作了一个插件。当页面通过ajax成功加载内容时,我想在页面上使用联系人表单7。我使用do_shortcode() 标记为“联系人表单7常见问题解答”上的“解释”,但无法显示表单。下面是我正在执行的示例代码:

function.php

add_action( \'wp_enqueue_scripts\', \'ajax_test_enqueue_scripts\' );

function ajax_test_enqueue_scripts() {

    wp_enqueue_script( \'season\', plugins_url( \'/form-submit.js\', __FILE__ ), array(\'jquery\'), \'1.0\', true );

    wp_localize_script( \'season\', \'myAjax\', array(
        \'ajax_url\' => admin_url( \'admin-ajax.php\' )
    ));

}

add_action(\'wp_ajax_confirmRequest\', \'_myConfirmHandler\');
add_action(\'wp_ajax_nopriv_confirmRequest\', \'_myConfirmHandler\');

function _myConfirmHandler()
{
    if(isset($_POST[\'vehicle_no\']))
    {
        $vehicle_no = $_POST[\'vehicle_no\'];
        $email = $_POST[\'email\'];

        echo "Your Data: <br>$vehicle_no <br>$email<p />";
        echo do_shortcode(\'[cfdb-table form="season parking form_copy" filter="your-platno=\' . $vehicle_no . \'"]\');
        echo do_shortcode(\'[contact-form-7 id="6871" title="season parking form_copy"]\'); 
    }

    exit;
}

jQuery

jQuery(document).ready(function($) {
    $(\'#submit_payment\').click(function(e){
        e.preventDefault();
        var str = $("form[name=season-form]").serialize();
        $.ajax({
            type: "POST",
            url: myAjax.ajax_url,
            data: str + \'&action=confirmRequest\' 
        }).done(function(data){
            $("#result").html(data);
        });
    });
});
它只会输出[contact-form-7 id="6871" title="season parking form_copy"]enqueue 联系人表单7的脚本。如果需要,怎么做

1 个回复
SO网友:Mark Kaplun

如果没有看到如何注册短代码的代码,很难给出百分之百的答案,但从您的描述来看,在处理ajax请求时,它似乎没有被注册。原因可能是ajax请求是在“admin”conttext中处理的,而短代码是前端工件,因此插件作者可能决定在admin端根本不注册。

有几种可能的解决方案

不要(并且尽量不要)使用do_shortcode 只需直接调用生成短代码的api,自己注册短代码即可wp-json 端点具有register_rest_route 而不是admin-ajax.php 一它不采用管理上下文,并且由于不进行与管理相关的初始化,因此速度更快

相关推荐

无法使用AJAX访问数据库中的数据

我正试图在wordpress中首次调用AJAX。我遵循了一些教程,到目前为止已经达到了这一点。但当我试图安慰的时候。将从数据库中获取的数据记录在AJAX调用中,我发现以下错误:未捕获引用错误:未定义数据代码:功能。phpfunction my_ajax_handler(){ global $wpdb; $name = $wpdb->get_results(\"SELECT * FROM username\"); echo $name;