web-dev-qa-db-fra.com

Shortcode dans AJAX apparaitre

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 -

  • Allez sur http://www.ajaymreddy.com/stg/country/india/#
  • Cliquez sur Démarrer
  • Sélectionnez l'une des cases à cocher - veillez à ne pas cliquer sur le texte contre les cases à cocher
  • Cliquez sur le bouton Enregistrer dans la fenêtre contextuelle. Si vous n'êtes pas connecté, le bouton Connexion fb devrait apparaître. Cependant, seul le texte abrégé est actuellement affiché.

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');
                    }
                    });
            }
    });
2
Ajay R

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.

1
Ajay R