Ich brauchte eine Möglichkeit, um den Inhalt einer Seite / eines Beitrags zu filtern, bevor er geladen wurde, damit ich dem Header Skripte hinzufügen konnte, wenn ein bestimmter Shortcode vorhanden war. Nach langem Suchen bin ich auf http://wpengineer.com gestoßen
function has_my_shortcode($posts) {
if ( empty($posts) )
return $posts;
$found = false;
foreach ($posts as $post) {
if ( stripos($post->post_content, '[my_shortcode') )
$found = true;
break;
}
if ($found){
$urljs = get_bloginfo( 'template_directory' ).IMP_JS;
wp_register_script('my_script', $urljs.'myscript.js' );
wp_print_scripts('my_script');
}
return $posts;
}
add_action('the_posts', 'has_my_shortcode');
Das ist absolut genial und hat genau das getan, was ich brauchte.
Jetzt muss ich es ein bisschen weiter ausbauen und das Gleiche für Sidebars tun. Es kann sich um einen bestimmten Widget-Typ, einen Shortcode, ein Code-Snippet oder irgendetwas anderes handeln, um zu identifizieren, wann das Skript geladen werden muss.
Das Problem ist, dass ich nicht herausfinden kann, wie ich auf den Inhalt der Seitenleiste zugreifen kann, bevor die Seitenleiste geladen wird (das betreffende Thema hat mehrere Seitenleisten).
quelle
Antworten:
Sie können die Funktion is_active_widget verwenden . Z.B:
Um das Skript auf der Seite zu laden, auf der nur das Widget geladen wird, müssen Sie in Ihrer Widget-Klasse den Code is_active_widget () hinzufügen. Siehe z. B. das Standard-Widget für aktuelle Kommentare (wp-includes / default-widgets.php, Zeile 602):
quelle
Ich wollte nur eine Lösung vorstellen, an der ich gearbeitet habe und die es mir ermöglichte, meine Implementierung etwas vielseitiger zu gestalten. Anstatt die Funktion auf eine Vielzahl von Shortcodes prüfen zu lassen, habe ich sie geändert, um einen einzelnen Shortcode zu suchen, der auf eine Skript- / Stilfunktion verweist, die in die Warteschlange gestellt werden muss. Dies funktioniert sowohl für Methoden in anderen Klassen (z. B. Plugins, die dies möglicherweise nicht selbst ausführen) als auch für Funktionen im Gültigkeitsbereich. Legen Sie einfach den folgenden Code in functions.php ab und fügen Sie die folgende Syntax zu jeder Seite / jedem Post hinzu, auf der Sie spezifisches CSS und JS wünschen.
Page / Post-Syntax: [loadCSSandJS function = "(class-> method / function name)"]
functions.php code:
Auf diese Weise können Sie auf einer Seite so viele hinzufügen, wie Sie möchten. Denken Sie daran, dass Sie zum Laden eine Methode / Funktion benötigen.
quelle
Vielen Dank für diesen Tipp! Es bereitete mir ein bisschen Kopfschmerzen, weil es zuerst nicht funktionierte. Ich denke, es gibt ein paar Fehler (vielleicht Tippfehler) im obigen Code
has_my_shortcode
und ich habe die Funktion wie folgt umgeschrieben:Ich denke, es gab zwei Hauptprobleme: Das
break
war nicht im Umfang der if-Anweisung, und das verursachte, dass die Schleife immer bei der ersten Iteration unterbrochen wurde. Das andere Problem war subtiler und schwieriger zu entdecken. Der obige Code funktioniert nicht, wenn der Shortcode das allererste ist, was in einem Beitrag geschrieben wird. Ich musste den===
Operator verwenden, um dies zu lösen.Wie auch immer, vielen Dank, dass Sie diese Technik geteilt haben, sie hat mir sehr geholfen.
quelle
mit Wordpress 4.7 gibt es eine andere Möglichkeit, dies in Ihrer
functions.php
Datei zu erreichen ,Zuerst registrieren Sie Ihr Skript , das nicht auf Ihrer Seite gedruckt wird, es sei denn, Sie stellen es in eine Warteschlange, wenn Ihr Shortcode aufgerufen wird.
Das
do_shortcode_tag
wurde in WP 4.7 eingeführt und ist auf den Dokumentationsseiten der neuen Entwickler zu finden .quelle