WordPress jQuery Lightbox prettyPhoto ohne Plugin
Eine beliebte und weitverbreitete Methode Bilder, Videos oder andere Inhalte einer Website darzustellen ist die sogenannte Lightbox. Diese öffnet den gewünschten Inhalt in einem extra Fenster und verdunkelt derweil den Hintergrund. Im Folgenden möchte ich zeigen, wie man ohne Plugin die jQuery Lightbox prettyPhoto in ein WordPress-Theme einbaut.
jQuery Lightbox prettyPhoto
In vielen meiner Themes ist die jQuery Lightbox prettyPhoto bereits eingebaut. Persönlich finde ich prettyPhoto eines der schickesten jQuery-Lightbox-Plugins (nicht WordPress-Plugin!) und möchte daher zeigen, wie man es auf korrekte Weise und ohne WordPress-Plugin in ein Theme integriert.
Folgender Content kann von prettyPhoto in der Lightox dargestellt werden:
- Einzelbild
- Bildergelerie (mit Navigation)
- Flash
- YouTube-Videos
- Vimeo-Videos
- QuickTime-Videos
- iFrames (externe Websites)
- Inline Content (HTML-Elemente)
- Galerie aus gemischten Inhalten
Herunterladen von prettyPhoto
Zunächst laden wir uns das Original-Skript von der Website des Plugin-Autors Stephane Caron.
unkomprimierte Version | komprimierte Version
Den heruntergeladenen ZIP-Ordner entpacken wir und laden die darin enthaltenen Ordner /css, /images und /js in einen Ordner unseres WordPress-Themes z. B. /wp-content/themes/**dein-theme**/pretty/.
Einbinden von jQuery
Um die prettyPhoto-Lightbox nutzen zu können, müssen wir zunächst die Javascript-Bibliothek jQuery aktivieren bzw. in userem Theme-Header laden.
Jede WordPress-Installation bringt jQuery, da es sehr häufig verwendet wird, von Haus mit. Folgender Aufruf in der functions.php des Themes läd die nötige Datei:
<?php
add_action('wp_enqueue_scripts', 'wdm_scripts');
function wdm_scripts() {
wp_enqueue_script('jquery');
}
?>
Eine Übersicht aller in WordPress bereits enthaltenen Skripte findet Ihr im WordPress-Codex.
Einbinden von prettyPhoto
Auch um die Skripte von prettyPhoto in den Head-Bereich unseres WordPress-Themes in der functions.php zu laden, behelfen wir uns wie bei dem allgemeinen jQuery-Skript der Funktionen wp_enqueue_script() und wp_enqueue_style().
Es müssen zwei Dateien eingebunden werden. Eine davon ist die Javascript-Datei /wp-content/themes/**dein-theme**/pretty/js/jquery.prettyPhoto.js und die andere ist das Stylesheet /wp-content/themes/**dein-theme**/pretty/css/prettyPhoto.css (s. a. Ordnerstruktur beim Upload).
<?php
add_action('wp_enqueue_scripts', 'wdm_scripts');
function wdm_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('pretty', get_bloginfo('template_url').'/pretty/js/jquery.prettyPhoto.js', array('jquery'), '2.5.6', false);
wp_enqueue_style('pretty', get_bloginfo('template_url').'/pretty/css/prettyPhoto.css', false, '2.5.6', 'all' );
}
?>
Im WordPress-Codex gibt es weitere Informationen zu wp_enqueue_script() und wp_enqueue_style().
Konfiguration von prettyPhoto
Alle nötigen Skripte sind bereits eingebunden. Nun muss die jQuery-Lightbox noch gesagt bekommen, wie, wann und wo sie funktionieren soll. Auf der Seite der Dokumentation von prettyPhoto finden wir, dass folgendes Skript in den Head-Bereich eingebunden werden muss:
<script type="text/javascript">
$(document).ready(function(){
$("a[rel^='prettyPhoto']").prettyPhoto();
});
</script>
Achtung! Beim Einbinden in WordPress ist zu beachten, dass jQuery im sogenannten no conflict mode geladen wird. Das ist bei der Konfiguration von prettyPhoto wichtig.
prettyPhoto im no conflict mode
Der Javscript-Aufruf muss daher um sogenannte no conflict wrapper erweitert werden, damit die Lightbox funktioniert:
<script type="text/javascript">
(function($) {
$(document).ready(function(){
$("a[rel^='prettyPhoto']").prettyPhoto();
});
})(jQuery);
</script>
Weitere Informationen zu der Methode der no conflict wrapper gibt es im WordPress-Codex.
Einbinden in der functions.php
Um das Theme nicht direkt in die header.php des WordPress-Themes einzufügen, behelfen wir uns der WordPress-Action wp_head, mit der man in der functions.php den Theme-Header erweitern kann:
<?php
add_action('wp_head','wdm_theme_head');
function wdm_theme_head() { ?>
<script type="text/javascript">
(function($) {
$(document).ready(function(){
$("a[rel^='prettyPhoto']").prettyPhoto();
});
})(jQuery);
</script>
<?php } ?>
Weitere Informationen zu Optionen und der Anpassung von prettyPhoto findet Ihr in der Dokumentation.
Aufruf von prettyPhoto
Mit der obigen Konfiguration der jQuery-Lightbox lässt sich diese mit jedem a-Tag mit rel="prettyPhoto" öffnen. Der zu verwendene Code im Post-Content oder in einem Theme-Template könnte also wie folgt aussehen:
<a href="http://domain.de/dein/bild.jpg" rel="prettyPhoto">Lightbox aufrufen</a>
Weitere Möglichkeiten Inhalte in die prettyPhoto-Lightbox zu laden, findet Ihr in den Demos des Skriptes.
Fazit
Letztlich muss jeder selbst wissen, ob es einfacher ist ein Plugin zu installieren oder das Skript zu Fuß einzubinden. Ich verzichte gerne auf Plugins, wenn diese möglich ist und ich das Wissen habe, den Code selbst einzubauen.
Den ThemeShift-Kunden gefällt dieses eingebaute Feature auf jeden Fall. In Kombination mit WordPress-Funktionen lassen sich mit dieser jQuery-Lightbox umfangreiche und vor allem ansprechende Galerien bauen.
Relevante Links
- jQuery Lightbox prettyPhoto | Dokumentation
- WordPress Codex: wp_enqueue_script()
- WordPress Codex: wp_enqueue_style()
- WordPress Codex: no conflict wrapper
Adsense und andere Werbungen mit WordPress
5 Schritte zum Sichern Ihres Wordpress-Blogs
SEO für WordPress ohne Plugins
Kommentare
Stephan - am 18. Mai 2010 -
Hallo Simon,
vielen Dank für diese tolle Beschreibung. Ich werde es auf jeden Fall mal ausprobieren – ein Plugin weniger
.
Gruß Stephan
Tom - am 18. August 2010 -
Sehr schöne verständliche Beschreibung.
Zur Einbindung würde ich aber auf das “rel” verzichten und alle Links ersetzen, die ein Bild (vielleicht auch Video, ..) als Ziel haben. Spart das umschrieben der ganzen Artikel, wenn man nicht neu anfängt.
roland - am 5. Oktober 2010 -
Hi, ich glaube, du hast bei den obigen Links zu den prettyphoto-zips was verwechselt: uncompressed / compressed müsste umgekehrt sein (oder halt der Linkext andersrum). Herzlichen Gruß
Simon [webdemar] - am 6. Oktober 2010 -
Moin Roland, vielen Dank für den Hinweis. Das habe ich berichtigt.
Balu - am 24. Oktober 2010 -
Vielen Dank für die hilfreichen Quelltexte, so konnte ich die Lightbox innerhalb von 5 Minuten ans laufen bringen!
Astrid - am 21. Januar 2011 -
Deine Anleitung ist echt gut. Ich habe da nur mal eine andere Frage.
Wie bekomme ich das “Expand the image” raus?
Google hier schon seit Std. und finde nix. Und in einem englischen Forum kann ich das nicht Fragen, da mein Englisch dafür leider zu schlecht ist.
Vielleicht weisst Du ja einen Rat.
LG
Astrid
Dominik - am 2. April 2011 -
Hallo, ich habe prettyPhoto eben erst entdeckt und als Plugin eingebaut. Für ohne fehlen mir die genügenden Kenntnisse… Meine Frage: Bei den Bildern funktioniert das Plugin, aber bei den Videos nicht. Kannst Du mir an einem Beispiel erklären, wie ich einen Youtube- oder Vimeo-Link richtig codiere, damit er mit prettyPhoto funktioniert? Vielen Dank!
Heartbreeze - am 20. September 2011 -
Hallo,
habe versucht das Plugin einzubauen, aber irgendwie funktioniert es nicht
Bekomme immer die folgende Fehlermeldung:
Fatal error: Cannot redeclare wdm_scripts() (previously declared in /home/www/web393/html/Wordpress/wp-content/themes/twentyeleven/functions.php:596) in /home/www/web393/html/Wordpress/wp-content/themes/twentyeleven/functions.php on line 605
Habe einfach den ganzen Code an das Ende der function.php Datei eingefügt, war mir nicht sicher, wie genau das aufgebaut wird!
Irgendetwas mach ich falsch. Würde mich echt freuen, wenn du mir vielleicht weiter helfen kannst. Sorry dass ich hier das Kommentar so zu mülle, aber unter Kontakt kommt leider nichts
LG Nadja
Trackbacks