我正在尝试使用Ultimate Facebook 插件中的简码在 AJAX 弹出窗口中显示 FB 连接按钮,但似乎无法使其正常工作。我在这个问题中搜索并使用了 djb 给出的解决方案 - 为什么插件的“do_shortcode”在 AJAX 请求中不起作用?,但它只是部分起作用。理想情况下,我希望用户能够使用 FB 登录,然后将列表保存到她的帐户。我想使用插件而不是嵌入直接代码,因为当有人使用 FB 连接时,也会在 wordpress 中创建一个新用户。
重现问题的程序 -
- 访问http://www.ajaymreddy.com/stg/country/india/#
- 点击开始
- 选择任何复选框 - 注意不要点击复选框的文本
- 单击弹出窗口中的“保存”按钮 如果您尚未登录,则应显示 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');
}
});
}
});