web-dev-qa-db-fra.com

Ajax, filtres et codes courts

pourriez-vous comprendre pourquoi je ne parviens pas à appliquer des filtres de shortcode dans l'inclusion ajax de posts?

Permettez-moi de mieux vous expliquer: j'ai réussi à inclure un message dans un autre message, via admin-ajax.php , comme recommandé dans le célèbre 5 conseils .

Évidemment, je ne veux pas afficher les balises shortcode, ni les effacer, donc je répète do_shortcode($post->post_content)

À ce stade, la galerie de publications est restituée mais non filtrée , même si j'utilise le plug-in "Cleaner Gallery", qui commence par add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 ); et fonctionne avec succès dans des publications normales (non ajax). .

J'ai essayé de déboguer ce problème en remplaçant

$output = apply_filters('post_gallery', '', $attr);
    if ( $output != '' )
        return $output;

avec

$output = apply_filters('post_gallery', '', $attr);
echo 'FILTERED OUTPUT = '.$output.' !';
    if ( $output != '' )
        return $output;

à l'intérieur de la fonction gallery_shortcode ($ attr) située dans , wp-includes/media.php . Il semble qu'il fonctionne deux fois, mais dans les inclusions ajax, la sortie est vide pour la première fois et ensuite, elle n'est pas filtrée.

Eh bien, dans l’ensemble des effets, il arrive que la sortie "2 ème tour" que j’ai mentionnée reste vide lors de la configuration add_filter avant do_shortcode ; sinon, c'est affiché (mais, comme je l'ai dit, non filtré).

J'ai aussi essayé de le suivre avec

echo has_filter('post_gallery');
echo current_filter();

et j'ai découvert que a renvoie toujours 1 , while courant retourne d'abord ' post-gallery 'comme prévu, puis il est écrasé par le crochet' * wp_ajax_nopriv_etc * ', nécessaire pour traiter les demandes avec admin -ajax.php mais c'est en fait une action et pas un filtre . (?!?)

J'ai aussi essayé sans succès de pirater le plugin de nettoyeur de galerie, afin de le faire exécuter directement le shortcode sans filtrer la fonction par défaut, j'ai supprimé le shortcode d'origine et ajouté ce nouveau. Cela fonctionne comme un charme pour les messages normaux, mais il semble qu'il n'y ait aucun moyen d'implémenter le plugin dans les requêtes ajax.

Je suis de plus en plus confus. Aidez-moi, s'il vous plaît!

(également publié sur les forums WP.org )

1
3dolab

Awww ... in admin-ajax.php :

define('WP_ADMIN', true);

dans cleaner-gallery.php :

function cleaner_gallery_setup() {    
    if ( is_admin() ) {
        require_once( CLEANER_GALLERY_DIR . 'admin.php' );
    } else {
        require_once( CLEANER_GALLERY_DIR . 'gallery.php' );
    }
}

Je dois donc inclure et exécuter manuellement le code de plug-in nécessaire ignoré après la vérification de la constante WP_ADMIN, mais je suppose que le besoin d'un gestionnaire ajax frontal est de plus en plus urgent!

0
3dolab

Lorsque WordPress affiche le contenu du message, il n’exécute pas do_shortcode() sur le contenu du message, il exécute apply_filters( 'the_content', $content ). Les filtres de shortcode sont appliqués sur le filtre the_content. C'est pourquoi vous devez ajouter des filtres supplémentaires pour qu'ils fonctionnent dans les widgets, le pied de page ou ailleurs.

2
EAMann

Je ne sais pas si vous avez travaillé sur une solution, mais j'ai eu un problème similaire et résolu par:

  • dissocier la fonction de galerie d'origine du shortcode de la galerie
  • reliant ma propre fonction de galerie au shortcode de la galerie d'origine (au lieu de créer un nouveau shortcode pour une fonction de galerie personnalisée)

    //unbinds WordPress function in order to replace it with new code
    remove_shortcode('gallery', 'gallery_shortcode');
    //binds own custom gallery code function
    add_shortcode('gallery', 'acmecustomgallery_shortcode');
    

Plus de détails ici .

1
Celso Bessa