0
我想從Ultimate Facebook plugin中使用短代碼在AJAX彈出框中顯示FB連接按鈕,並且似乎無法使其正常工作。我在這個問題中搜索並使用了djb給出的解決方案 - 爲什麼插件的'do_shortcode'不能在AJAX請求中工作?但它只能部分工作。理想情況下,我希望用戶能夠使用FB登錄,然後將列表保存到她的帳戶。我想使用插件而不是嵌入直接代碼,因爲當有人使用FB連接時,也會在wordpress中創建一個新用戶。在Wordpress AJAX中不工作的短代碼
程序來重現問題 -
- 轉到http://www.ajaymreddy.com/stg/country/india/#
- 點擊開始
- 選擇任何checboxes的 - 小心不上點擊文字對 複選框
- 點擊保存彈出按鈕如果你沒有登錄,連接按鈕應該顯示出來。但是,只有短代碼文本是 當前顯示。
代碼中的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');
}
});
}
});