短代码无法在Wordpress AJAX中运行

时间:2013-06-04 02:07:08

标签: ajax wordpress plugins shortcode

我正在尝试使用Ultimate Facebook plugin中的短代码在AJAX弹出窗口中显示FB连接按钮,但似乎无法使其正常工作。我在这个问题中搜索并使用了djb给出的解决方案 - 为什么插件的'do_shortcode'在AJAX请求中不起作用?,但它只能部分工作。理想情况下,我希望用户能够使用FB登录,然后将列表保存到她的帐户。我想使用插件而不是嵌入直接代码,因为当有人使用FB连接时,也会在wordpress中创建一个新用户。

重现问题的程序 -

  • 转到http://www.ajaymreddy.com/stg/country/india/#
  • 点击开始
  • 选择任何一个checbox - 注意不要点击文本 复选框
  • 单击弹出窗口中的“保存”按钮如果您尚未登录,则为fb 连接按钮应该出现。但是,只有短代码文本 目前正在出现。

functions.php中的代码 -

//From http://wordpress.stackexchange.com/questions/53309/why-might-a-plugins-do-shortcode-not-work-in-an-ajax-request
add_action( 'init', function() {
  ps_register_shortcode_ajax( 'show_fblogin', 'show_fblogin' );
} );

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

function show_fblogin(){
        if (!is_user_logged_in())
          echo do_shortcode('[wdfb_connect]');
        die ();
}
add_action( 'wp_ajax_show_fblogin', 'show_fblogin' );
add_action( 'wp_ajax_nopriv_show_fblogin', 'show_fblogin' );

ajax文件中的代码 -

$(document).on( 'click', '#saveBtn', function (){
            if (myAjax.loggedin==1)
            {
                    jQuery.ajax({
                    type: 'POST',
                    url: myAjax.ajaxurl,

                    data: {
                            action: 'save_whslist',
                            selected: selected.toString(),
                            whsNonce: myAjax.selectNonce,
                    },
                    success: function(data, textStatus, XMLHttpRequest){
                            selected = [];
                            modal.close();
                            $("input.whsites").prop('disabled', true);
                            $("input.whsites").prop('checked', false);
                    },
                    error: function(MLHttpRequest, textStatus, errorThrown){
                            alert(errorThrown+' fail');
                    }
                    });
            }
            else
            {
                    jQuery.ajax({
                    type: 'POST',
                    url: myAjax.ajaxurl,

                    data: {
                            action: 'show_fblogin',
                            selected: selected.toString(),
                            whsNonce: myAjax.selectNonce,
                    },
                    success: function(data, textStatus, XMLHttpRequest){
                            modal.open({content: "<p>Please login to save your travel list<br /><span>No auto posts on your wall!</span></p>"+data});
                    },
                    error: function(MLHttpRequest, textStatus, errorThrown){
                            alert(errorThrown+' fail');
                    }
                    });
            }
    });

1 个答案:

答案 0 :(得分:0)

为后代添加解决方案 - 我通过添加FB.XFBML.parse()解决了这个问题。一旦AJAX调用成功返回。希望这会有所帮助。