私は、Ultimate Facebookプラグインからのショートコードを使用してAJAXポップアップにFB接続ボタンを表示しようとしていますが、正しく機能しているようには見えません。私はこの質問でdjbによって与えられた解決策を検索して使用しました - なぜプラグインの 'do_shortcode'がAJAXリクエストで機能しないのでしょうか? それは部分的にのみ機能しました。理想的には、FBを使用してサインインしてからリストを自分のアカウントに保存できるようにします。私は直接コードを埋め込む代わりにプラグインを使用したいのですが、誰かがFB接続を使用するときにもワードプレスで新しいユーザーを作成するからです。
問題を再現するための手順 -
functions.phpのコード -
//From https://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');
}
});
}
});
子孫のための解決策の追加 - FB.XFBML.parse()を追加することで解決しました。 AJAX呼び出しが正常に終了したらお役に立てれば。