manipulieren Sie einen Plugins-Shortcode

Ich möchte etwas Javascript direkt unter dem Inhalt hinzufügen, das durch den Shortcode eines anderen Plugins hinzugefügt wurde.

Wir benutzen das NextGen Gallery Plugin und es gibt viele Artikel, die den [nggallery] shortcode enthalten. Ich möchte nicht alle Artikel ändern und möchte nicht alle Autoren informieren, in Zukunft einen anderen Shortcode zu verwenden. Und ich möchte auch nicht das ursprüngliche Plugin ändern.

Gibt es eine Möglichkeit, einen Shortcode wie folgt zu ändern:

function put_script_after_nggallery_shortcode( $atts ){ return "[nggallery $atts] foo();"; } add_shortcode( 'nggallery', 'put_script_after_nggallery_shortcode' ); 

oder sollte ich irgendwie in den Renderprozess von the_content () einhaken, um mein Skript direkt in die content-Zeichenkette nach [nggallery id = nnn] zu setzen. Könnte das mit einem Filter für den_content gemacht werden?

Solutions Collecting From Web of "manipulieren Sie einen Plugins-Shortcode"

du könntest

 remove_shortcode( 'nggallery' ); 

und füge es dann erneut hinzu:

 function put_script_after_nggallery_shortcode( $atts ){ global $nggShortcodes; $nggShortcodes->show_gallery($atts); //or otherwise duplicate the callback function wp_enqueue_script('special-ngg-sciprt', 'url-to-script', null, null, true); } add_shortcode( 'nggallery', 'put_script_after_nggallery_shortcode' ); 

Ich bin mir nicht sicher, dass meine show_gallery funktioniert, aber scheint logisch

Welches Skript müssen Sie hinzufügen? warum nicht einfach wp_enqueue_script alleine? Es gibt keinen Grund, dass der Skriptcode inline sein muss.

BEARBEITEN SIE # 1

Da $ nggShortcodes offensichtlich keine globale Variable ist, können wir versuchen, die Objektnotation zu verwenden … oder Sie könnten einfach den Inhalt von NextGens Gallerie-Shortcode-Callback kopieren, falls dies nicht funktioniert. Außerdem habe ich eine classnüberprüfung hinzugefügt, um sicherzustellen, dass Ihre Website nicht beschädigt wird, wenn NextGen jemals deaktiviert wird.

 function put_script_after_nggallery_shortcode( $atts ){ if( ! class_exists('NextGEN_Shortcodes')) return; NextGEN_Shortcodes->show_gallery($atts); //or paste in the callback function ?>  < ?php } add_shortcode( 'nggallery', 'put_script_after_nggallery_shortcode' ); 

Seit WordPress 4.7 können Sie den do_shortcode_tag Filter verwenden.

 add_filters( 'do_shortcode_tag', 'wpse_106269_do_shortcode_tag', 10, 4 ); function wpse_106269_do_shortcode_tag( $output, $tag, $attr, $m ) { if( $tag === something ) { //* Do something useful } return $output; }