Ajax, Filter und Shortcodes

Könntest du herausfinden, warum ich keine Shortcode-Filter in Ajax-Einträgen von Posts bekommen kann?

Lass es mich besser erklären: Ich habe es geschafft, einen Beitrag aus einem anderen Post heraus zu schreiben , über admin-ajax.php , wie in den berühmten 5 Tipps empfohlen.

Offensichtlich möchte ich weder die Shortcode-Tags anzeigen, noch möchte ich sie strippen, also do_shortcode($post->post_content) ich ein Echo von do_shortcode($post->post_content)

Zu diesem Zeitpunkt wird die Post-Galerie gerendert, aber ungefiltert , obwohl ich das Plugin “Cleaner Gallery” add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 ); , das mit add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 ); beginnt add_filter( 'post_gallery', 'cleaner_gallery', 10, 2 ); und funktioniert erfolgreich in normalen (Nicht-Ajax) Posts.

Ich habe versucht, dieses Problem durch Ersetzen zu debuggen

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

mit

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

in der function gallery_shortcode ($ attr) in wp-includes / media.php . Es scheint, dass es zweimal läuft, aber in Ajax-Einschlüssen ist die Ausgabe zum ersten Mal leer und wird dann nicht gefiltert.

Nun, in allen Fällen passiert es, dass auch die “zweite Runde”, die ich erwähnte, leer bleibt, wenn ich noch einmal add_filter vor do_shortcode setze ; sonst wird es gezeigt (aber wie gesagt ungefiltert).

Ich habe auch versucht, es mit zu verfolgen

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

und ich habe festgestellt, dass immer 1 zurückgegeben wird , während die aktuelle zuerst ‘ post-gallery ‘ wie erwartet zurückgibt, und dann wird sie vom ‘ * wp_ajax_nopriv_etc * ‘ – Hook überschrieben, der benötigt wird, um Anfragen mit admin-ajax.php zu bearbeiten es ist eigentlich eine Aktion und kein Filter . (?!?)

Ich habe auch erfolglos versucht, das cleaner gallery plugin zu hacken, damit es den shortcode direkt ausführt, ohne die Standardfunktion zu filtern, den ursprünglichen shortcode entfernt und diesen neuen hinzugefügt hat. Es funktioniert wie ein Charme für normale Posts, aber es scheint, dass es keine Möglichkeit gibt, das Plugin in Ajax-Anfragen zu implementieren.

Ich werde immer verwirrter. Bitte hilf mir!

(auch in den WP.org Foren veröffentlicht )

Solutions Collecting From Web of "Ajax, Filter und Shortcodes"

Wenn WordPress Post-Inhalt anzeigt, wird do_shortcode() für den Post-Inhalt nicht ausgeführt, es wird apply_filters( 'the_content', $content ) . Shortcode-Filter werden auf den the_content Filter angewendet, weshalb Sie zusätzliche Filter hinzufügen müssen, damit sie in Widgets oder in der Fußzeile oder anderswo funktionieren.

Ich weiß nicht, ob Sie an einer Lösung gearbeitet haben, aber ich hatte ein ähnliches Problem und wurde getriggers durch:

  • Entbinden der ursprünglichen Galeriefunktion von der Galerie-Shortcode
  • Binden meiner eigenen Galeriefunktion an den ursprünglichen Galerie-Shortcode (anstatt einen neuen Shortcode für eine benutzerdefinierte Galeriefunktion zu erstellen)

     //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'); 

Mehr Details hier .

Awww … in admin-ajax.php :

 define('WP_ADMIN', true); 

in cleaner-galerie.php :

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

Also muss ich den notwendigen Plugin-Code manuell einfügen und ausführen, nachdem ich die WP_ADMIN-Konstante überprüft habe, aber ich denke, dass die Notwendigkeit eines Frontend-Ajax-Handlers immer dringender wird!