如何通过AJAX调用使用DO_SHORT代码?

时间:2012-07-31 作者:Mike Walton

我试图在Wordpress主题中使用AJAX调用联系人表单7表单。理想情况下,我希望使用Contact Form 7快捷码来实现这一点,但在使用AJAX调用时,do\\u快捷码似乎不是一个可用的函数(它只是呼应了快捷码本身)。

我偶然发现了这个问题:Why might a plugin's 'do_shortcode' not work in an AJAX request?

这正是我的问题!然而,提供的解决方案对我不起作用,我很确定我是以与原始帖子相同的方式实现的:

add_action( \'init\', create_function(\'\',  \'register_shortcode_ajax( "cl_contact_us", "cl_contact_us" ); \'));

function register_shortcode_ajax( $callable, $action ) {
    if ( empty( $_POST[\'action\'] ) || $_POST[\'action\'] != $action )
        return;
    call_user_func( $callable );
}

function cl_contact_us() {
    echo do_shortcode( \'[contact-form-7 id="7" title="Contact form 1"]\' );
    die(); 
} 
我唯一需要改变的是如何从add\\u action函数调用匿名函数(出于某种原因,使用传统的匿名函数不起作用,但使用PHP函数效果很好)。

除了上述内容之外,唯一根本不同的是jQuery AJAX调用,但我相信它基本上是一样的。。。

var ajaxurl = \'<?php echo admin_url(\'admin-ajax.php\'); ?>\';
$(document).ready(function(){
    $(\'a#contact-button\').click(event, function() {
            event.preventDefault();
            $.post(
               ajaxurl, 
                {
                    \'action\':\'cl_contact_us\',
                }, 
            function(response) {
                $(\'#form\').append(response);
            });
        });
    });
这成功地执行了一个AJAX调用,但它仍然只是回显了短代码,而不是表单。

我希望这是足够的信息,如果你需要更多的信息,我会整天都在这里:)非常感谢你的帮助。谢谢

1 个回复
最合适的回答,由SO网友:ifdion 整理而成

我认为使用联系人表单7插件不可能做到这一点。因为插件使用bind(\'click\') 在提交按钮JS触发器上live(\'click\') 使用AJAX加载的表单。

或者,您可以使用定制的联系人表单,或者默认情况下使用JS隐藏联系人表单并单击按钮显示。第二个解决方案更简单,在没有JS的情况下仍然可以工作。

希望这有帮助

结束

相关推荐

发送JSON时AJAX调用失败,但可使用URL样式字符串

当我的数据是URL样式的字符串时,发出AJAX请求是可行的。var options = { type: \'post\', data: \'action=my_action\' }; 该函数将被调用并返回一些虚假数据。如果我尝试进行相同的调用,但使用JSON,则不会起作用。我已经尝试了几种不同的方法,但管理员。php只需返回-1。jQuery或Wordpress中是否有需要更改的内容以允许这样做?以下是我尝试过的其他几种方法。var options = {