WordPress jQuery Lightbox prettyPhoto ohne Plugin

18. Mai 2010 - jQuery, Tutorials, WordPress - 11 Kommentare

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.

Drück mich für eine Demo

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>

Drück mich für eine Demo

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

Autor

Moin, ich bin Simon und ehemaliger Betreiber dieses Blogs.

RSS abonnieren

und so weiter...

Kommentare

  • Stephan - am 18. Mai 2010 - Antworten

    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 - Antworten

    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 - Antworten

    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ß

  • Balu - am 24. Oktober 2010 - Antworten

    Vielen Dank für die hilfreichen Quelltexte, so konnte ich die Lightbox innerhalb von 5 Minuten ans laufen bringen!

  • Astrid - am 21. Januar 2011 - Antworten

    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 - Antworten

    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 - Antworten

    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

Deine Meinung