J'essaie d'utiliser un shortcode du plug-in Ultimate Facebook pour afficher un bouton de connexion FB dans un popup AJAX et n'arrive pas à le faire fonctionner correctement. J'ai cherché et utilisé la solution donnée par djb dans cette question - Pourquoi le 'do_shortcode' d'un plugin ne fonctionne-t-il pas dans une requête AJAX? , mais cela n'a fonctionné que partiellement. Idéalement, je souhaite qu'un utilisateur puisse se connecter à l'aide de FB, puis enregistre la liste dans son compte. Je souhaite utiliser le plug-in au lieu d'incorporer du code direct, car cela crée également un nouvel utilisateur dans wordpress lorsqu'un utilisateur utilise FB Connect.
Procédure pour reproduire le problème -
Code dans 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' );
Code dans le fichier 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');
}
});
}
});
Ajout de la solution pour la postérité - je l'ai résolue en ajoutant FB.XFBML.parse (); une fois l'appel AJAX retourné avec succès. J'espère que cela t'aides.