Ultimate Facebook プラグインのショートコードを使用して、FB 接続ボタンを AJAX ポップアップに表示しようとしていますが、正しく動作しないようです。この質問でdjbによって提供されたソリューションを検索して使用しました-プラグインの「do_shortcode」がAJAXリクエストで機能しないのはなぜですか?しかし、部分的にしか機能しませんでした。理想的には、ユーザーが FB を使用してサインインし、リストを自分のアカウントに保存できるようにしたいと考えています。誰かが FB コネクトを使用するとワードプレスでも新しいユーザーが作成されるため、直接コードを埋め込む代わりにプラグインを使用したいと考えています。
問題を再現する手順 -
- 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');
}
});
}
});