Suchen Sie nach Kurzwahl in Post / Seiten UND Widgets UND Vorlagendateien

Für die nächste Version meines Plugins www.mapsmarker.com möchte ich die css und js-Dateien des Plugins nur dann ausgeben, wenn der Shortcode [mapsmarker …] verwendet wird. Für Posts / und Seiten habe ich diesen Code bereits gefunden:

function lmm_detect_shortcode() { global $post; $pattern = get_shortcode_regex(); preg_match_all( '/'. $pattern .'/s', $post->post_content, $matches ); if( is_array( $matches ) && array_key_exists( 2, $matches ) && in_array( 'mapsmarker', $matches[2] ) ) { echo 'shortcode is used'; } } add_action( 'wp', 'lmm_detect_shortcode' ); 

Problem ist, dass die Maps auch direkt in Widgets (per Shortcode) oder Template-Datei eingebettet werden können, indem man die function do_shortcode () verwendet (http://www.mapsmarker.com/docs/how-to-add-maps-to-). Ihre Site-Verwendung-Template-Tags /) und der obige Code prüft nicht, ob das wahr ist – was dazu führt, dass die Karte nicht angezeigt wird.

Als Workaround könnte ich eine Option in den Plugin-Einstellungen hinzufügen, wenn die js / css-Dateien nur hinzugefügt werden sollen, wenn der Shortcode zu einem Post oder einer Seite hinzugefügt wird und die Beschreibung hinzugefügt wird, um diese Einstellung zu deaktivieren, wenn eine Map zu Widgets hinzugefügt wird Shortcode oder Vorlagendateien über do_shortcode ().

Da dies keine recht brauchbare Lösung ist (was auf lange Sicht zu Supportanfragen führen würde), suche ich nach einer Lösung, bei der ich diese function standardmäßig aktivieren kann und keine Option zu den Einstellungen hinzufügen muss , weil der Code auch prüft, ob ein Shortcode in Widgets oder über do_shortcode () in einer der Template-Dateien hinzugefügt wird, so:

 .... if( ( is_array( $matches ) && array_key_exists( 2, $matches ) && in_array( 'mapsmarker', $matches[2] ) ) || ( CHECK IF SHORTCODE USED IN WIDGETS == TRUE ) || ( CHECK IF SHORTCODE USED IN TEMPLATE FILES == TRUE ) ) { echo 'shortcode is used'; } ..... 

Meine erste Annäherung an dieses Problem war, globale Variablen zu überprüfen und zu sehen, ob ich irgendwie diesen hinzugefügten Code herausfiltern könnte, zB durch $ wp_filter (array) – ein mehrdimensionales Array aller functionen, die zu Filtern / Hooks hinzugefügt wurden. Leider habe ich noch keine Lösung gefunden. Jede Hilfe wird geschätzt!

Solutions Collecting From Web of "Suchen Sie nach Kurzwahl in Post / Seiten UND Widgets UND Vorlagendateien"

Jemand mag mich korrigieren, aber ich denke, ab Version 3.3 können Sie Skripte und Stile “inline” eines Posts in die Warteschlange stellen.

Bedeutet: Sie können Ihr wp_enqueue_script / style in Ihre Shortcode-function einfügen und WordPress wird sie zur Fußzeile hinzufügen … da es zu spät ist, sie zur Kopfzeile hinzuzufügen.

Bedeutet: Es wird nur funktionieren, wenn der Shortcode aufgerufen wird.

Edit: als Antwort auf Nicks Kommentar bezüglich der Frage, wo die Enqueue-function hinzugefügt werden soll: Ich habe einen kurzen Test mit dem Beispiel-Shortcode aus dem Codex gemacht:

 function caption_shortcode( $atts, $content = null ) { wp_enqueue_script('myscript','nonexistinglocation'); wp_enqueue_style('mystyle','throwmeanerror'); return '' . $content . ''; } 

Getestet in Post-Inhalt und Text-Widget und funktioniert so weit (ohne Berücksichtigung der ungültigen URLs) Die functionen sollten vor der Rückkehr natürlich aufgerufen werden (und ja, mach es richtig, und registriere dein Skript und deine Styles vorher [ faul ])