Sidebar
ein-/ausblenden

WordPress und jQuery - einige Tipps

Plugin für WordPress SEO

Anzeige

Innerhalb von WordPress sind eine ganze Reihe von Javascript Bibliotheken vorhanden, diese kann man einfach nutzen und muss sie nicht extra in Themes und Plugins mitbringen. Ebenfalls empfiehlt sich diese Vorgehensweise, damit Bibliotheken nicht mehrfach geladen werden. Einiges Hinweise zu beiden Themen findet ihr in den Beiträgen JavaScript-Bibliotheken in und aus WordPress nutzen und Abfrage einer Script-Version in WordPress.

jQuery Logo
Ab und an braucht man aber etwas bestimmtes und einiges davon wiederholt sich und daraus sind einige Code-Schnippsel entstanden, die hier nun abgelegt sind. Dabei möchte ich speziell am Beispiel jQuery zeigen, wie das geht - liegt zum einen daran, dass jQuery mit vielen Plugins im Core von WordPress vorhanden ist und dass die Arbeit mit jQuery recht unkompliziert ist. Prinzipiell gelten die Hooks und Aufrufe aber auch für eigene Scripte und andere Bibliotheken.

Die Hooks zum einhaken

WordPress bietet die Hooks um an bestimmten Punkten im Core einzuhaken. Hier ist einer der Stärken von WordPress und die folgenden drei Hooks sind insbesondere für das inkludieren von Scripten bei Themes interessant. Die nachfolgenden Beispiele zeigen die Verwendung auf.

jQuery von WordPress im Theme mit der Google AJAX Library ersetzen

Im folgenden Source wird die jquery-Library von Google CDN geladen; die Nutzung von jQuery kann aber ungestört genutzt bleiben. Andere Plugins können also via wp_enqueue_script() sehr einfach auf die Bibliothek zugreifen.


function fb_greyfoto_init() {
	if ( !is_admin() ) { // prinzipiell überflüssig, da der Hook nur im Theme zieht
		wp_deregister_script( 'jquery' ); // deregister Schlüssel jquery
		wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js', false, '1.4.2'); // registriere Schlüssel jquery mit der URL von Google CDN
		wp_enqueue_script( 'jquery' ); // binde jquery ein
	}
}
// nur für Theme, ab WordPress 3.0
add_action( 'after_setup_theme', 'fb_greyfoto_init' ); // Theme aktiv, inkludiere Funktion

jQuery Library im Footer

Der Standard-Aufruf von wp_enqueue_script( 'jquery' ) im Theme sorgt zwar dafür, dass man jQuery von WordPress holt und wenn alle Plugins und Themes die Bibliothek so referenzieren, dann wird die Bibliothek auch nur einmal eingebunden, aber jQuery wird nicht im Footer geladen, sondern im head der Site. Daher muss der Aufruf umgestellt werden und der Parameter für "lade im Footer" mitgegeben werden.
Im Aufruf des Beispiel zeigt sich auch der Unterschied der Hooks, da after_setup_theme erst ab WordPress 3.0 zur Verfügung steht.


function fb_greyfoto_init() {
	if ( !is_admin() ) {
		wp_deregister_script( 'jquery' );
		wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', false, '1.4.2', true ); // lade im Footer - true
		wp_enqueue_script( 'jquery' );

		// js vom Theme laden, Vorraussetzung jQuery
		wp_enqueue_script( 'styleswitcher', get_bloginfo( 'template_directory') . '/js/styleswitcher.jquery.php', array( 'jquery'), '1.3.2', true ); // lade mein Script mit Schlüssel styleswitcher im Footer und benutze jquery
		wp_enqueue_script( 'greyfoto', get_template_directory_uri() . '/js/photoblogfb.js', array( 'jquery', 'styleswitcher'), '1.1.3.1', true ); // nutze jquery und styleswitcher und lade dann Script greyfoto
	}
}

// auch für WP < version 3.0
global $wp_version;
if ( version_compare($wp_version, "3.0alpha", "<") ) {
	add_action( 'init', 'fb_greyfoto_init' );
} else {
	add_action( 'after_setup_theme', 'fb_greyfoto_init' );
}

Das obige Beispiel kann man noch ein wenig eleganter lösen und so das Laden der Scripte an WP übergeben; wichtig ist, dass die eigenen Scripte über einen Schlüssel registriert sind und diese Schlüssel gibt man dann nur als Voraussetzung mit.


function fb_greyfoto_init() {
	if ( !is_admin() ) {
		wp_deregister_script( 'jquery' );
		wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', false, '1.4.2', true ); // lade im Footer - true
		wp_register_script( 'styleswitcher', get_template_directory_uri() . '/js/styleswitcher.jquery.php', array( 'jquery'), '1.3.2', true ); // registrier mein Script mit Schlüssel styleswitcher für das Laden im Footer und Vorraussetzung jquery
		wp_register_script( 'greyfoto', get_template_directory_uri() . '/js/photoblogfb.js', array( 'jquery', 'styleswitcher'), '1.1.3.1', true ); // nutze jquery und styleswitcher und lade dann Script greyfoto

		wp_enqueue_script( array('greyfoto') ); // greyfoto braucht styleswitcher und jquery
	}
}

add_action( 'after_setup_theme', 'fb_greyfoto_init' );

Script bei spezieller Seite laden

Manche Scripte braucht man explizit nur auf bestimmten Templates, Seiten oder Beiträgen - dazu sind die Conditional Tags da; es gilt sie zu nutzen. Hier beginnt Performance-Optimierung. Das folgende Script wird nur beim Template custom-page.php geladen.


function fb_greyfoto_page_init() {
	if ( !is_page_template( 'custom-page.php' ) )
		return;

	wp_enqueue_script( 'mypagescript', get_template_directory_uri() . '/js/my_script_4_page.js', array('jquery'), '0.1', true );
}
add_action( 'template_redirect', 'fb_greyfoto_page_init' );

Die Verwendung des $

Auch innerhalb der Scripte gibt es einiges zu beachten.
Um mit $ zu arbeiten, wie viele mit jQuery gewohnt sind, muss Jquery aan $ übergeben werden; einfach und schnell passiert und nun kann man wie gewohnt arbeiten. Die Kurzvariante $(function() {} ); sollte man sich innerhalb von WordPress angewöhnen.


jQuery(function ($) {
	// hier kann man nun ohne Probleme $ als Referenz auf jQuery nutzen
});

Um zu prüfen, ob das HTML geladen ist, nutzt man den folgenden Aufruf. So stellt man sicher, dass der DOM geladen ist und man via jQuery das DOM durchsuchen kann und nun die eigentliche Arbeit des Scriptes starten kann. Ein klare Empfehlung also für diese Variante. Die vielen Vorteile möchte ich nicht erklären, dies kann man genau und umfangreich im Beitrag Introducing $(document).ready() nachlesen.


jQuery(document).ready(function ($) {
	$('#id').toggle({
		//paramter für bsp. toggle
	});
});

10 Kommentare zu „WordPress und jQuery - einige Tipps“

  1. 1
    Kommentar von Michael Pehl

    Danke für diese Tipps :)

  2. 2
    Kommentar von Roman

    Hallo Frank

    Danke für den Artikel. Eine kleine Ergänzung hätte ich hier noch zum Einbinden von jQuery und anderen Libraries. Anstatt jedes Skript via wp_enqeue_script() zu laden, kann man auch WordPress damit beauftragen. Dies macht man ja, wie du bereits erwähnt hast, über das mitgegebene Abhängigkeits-Array.

    Die beiden Aufrufe kann man sich dann aber getrost schenken:

    
            wp_enqueue_script( 'jquery' );
            wp_enqueue_script( 'styleswitcher', '/path/to/styleswitcher.js', array( 'jquery'), '1.3.2', true );
    

    Wichtig ist einfach nur, dass man die Abhängigkeiten im mitgegebenen Array nicht vergisst und dort auch wirklich die registrierten Skriptnamen einträgt.

    Der neue Code wäre dann wie folgt (Pfad gekürzt, damits in den comment passt):

    
    function fb_greyfoto_init() {
        if ( !is_admin() ) {
    
            wp_deregister_script( 'jquery' );
            wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', false, '1.4.2', true );
    
            // js vom Theme laden, Vorraussetzung jQuery
            wp_enqueue_script( 'greyfoto', '/path/to/greyfoto.js', array( 'jquery', 'styleswitcher'), '1.1.3.1', true ); 
    
        }
    }
    
  3. 3
    Kommentar von Frank Bültge

    @Roman: ja, ich wollte dies auch verdeutlichen, in dem ich das Array unten dran gepackt habe; aber vielleicht zu unverständlich. Danke für die Ergänzung. Wichtig ist in dem Fall ja, dass man die Schlüssel registriert hat.

  4. 4
    Kommentar von Frank Bültge

    @Roman: habe mal den Post noch ein wenig ergänzt, vielleicht passt es nun besser?

  5. 5
    Kommentar von Roman

    Wunderbar. Nun hab ich nichts mehr dran auszusetzen ;) .

  6. 6
    Kommentar von Marco

    Vielen Dank für den Tipp. Haben so einige WordPress Bloggs am laufen, da hat uns dieser Beitrag sehr weitergeholfen ;)

  7. 7
    Kommentar von Nicki

    Oh das liest sich toll. Wie immer bin ich dann wohl mit Mootools wieder ganz allein ^^ ... einige Deiner Beispiele lassen sich aber auch gut in abgewandelter Form auch dafür anwenden. Abfragen zum Script für bestimmte Seiten löse ich "klassisch": if_is_page/archive etc. Klappt auch wunderbar.

  8. 8
    Kommentar von Frank Bültge

    @Nicki: das inkludieren ist gleich, registriere den Schlüssel mootools und dann kannst du das immer nutzen. Die Verwendung ist gleich; entscheident ist die Referenz darauf, so dass sich WP um das ausliefern kümmert, keine Redundanz da ist und die Reihenfolge stimmt.

  9. 9
    Kommentar von Nicki

    Erledigt ^^. Danke

  10. 10
    Kommentar von Simon

    Hi Frank,

    danke für die coole Einführung. Habe zwar selber auch schon damit gearbeitet, allerdings doch noch die ein oder andere Sache mitgenommen.

    Ach ja: auch in Drupal kann man tolle Sachen mit JQuery machen ;)

    Gruß Simon

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.