Korrekte Referenzierung in WordPress Themes

Bei der Entwicklung von WordPress Themes, die unter allen nur denkbaren Bedingungen funktionieren sollen, ist es wichtig, bestimmte Fallen zu kennen, in die man bei der Referenzierung von zum Theme gehörenden Elementen leicht hineintappen kann.

Vor allem bei WordPress Installationen in einem Unterverzeichnis der Domain und beim Einsatz des rewrite-Modules für "schönere" url ist einiges zu beachten.

1. Inhaltsbezogene Referenzierung

Bilder, Videos usw., die ich in meine Beiträge oder Seiten einbinden will, lade ich am besten in Unterverzeichnisse hoch, die ich zuvor direkt im Rootverzeichnis meiner Domain anlege, z. B.:

www.domain.de/wordpress_bilder
www.domain.de/wordpress_videos

Aus dem Rootverzeichnis meiner Domain heraus kann ich ganz einfach referenzieren, indem ich mit einem Slash beginne:

<img src="/wordpress_bilder/bild.gif" alt="">

Das funktioniert immer, egal in welchem Unterverzeichnis meine WordPress-Installation liegt und was ich in meinen rewrite-Regeln festgelegt habe. Deshalb soll es das zur inhaltsbezogenen Referenzierung auch schon gewesen sein, das kann sich jeder selbst organisieren.

2.Themebezogene Referenzierung

Bei den folgenden Code-Beispielen gehe ich davon aus, dass themebezogene Bilder und Grafiken im Verzeichnis .../themes/mein_theme/images/ abgelegt sind.

Im Prinzip kann ich auch Grafiken und Elemente, die zum Theme gehören, aus dem Rootverzeichnis heraus referenzieren, wenn folgende 2 Bedingungen erfüllt sind:

  • Wordpress ist im Rootverzeichnis der Domain installiert
  • Die rewrite-Regeln (für "schönere" url) sind auf "Standard" eingestellt

Die Referenzierung sieht dann ungefähr so aus:

<img src="/wp-content/themes/mein_theme/images/bild.gif" alt="">

Der Slash am Anfang der Referenzierung sagt dem Browser, dass der Pfad im Rootverzeichnis der Domain beginnt.

Wenn ich das Theme aber auch problemlos in andere WordPress Installationen übernehmen will, gibt das Probleme, weil ich nicht wissen kann, ob die oben genannten Bedingungen erfüllt sind.

2.1. WordPress ist in einem Unterverzeichnis installiert

Wenn WordPress in einem Unterverzeichnis der Domain installiert ist, funktioniert die Referenzierung aus dem Rootverzeichnis der Domain heraus nicht mehr universell in allen WordPress Installationen, da ich nicht wissen kann, wie der andere sein Unterverzeichnis für die WordPress Installation genannt hat.

Solange jedoch die rewrite-Regeln auf "Standard" gestellt sind, funktioniert folgende Art der Referenzierung:

<img src="wp-content/themes/mein_theme/images/bild.gif" alt="">

Hier wurde der erste Slash weggelassen, WordPress referenziert nun relativ aus dem WordPress Installationsverzeichnis heraus.

Wenn aber die rewrite-Regeln nicht auf "Standard" gestellt sind, kann auch diese Art der Referenzierung Probleme bereiten.

2.2. Die rewrite-Regeln sind nicht auf "Standard" gestellt

In diesem Fall kann es sein, dass WordPress Verzeichnisse referenziert, die physikalisch auf dem Server gar nicht vorhanden sind, z. B.:

http://www.domain.de/wordpress-verzeichnis/category/alle-beitraege

Das Verzeichnis "category" ist auf dem Server physikalisch gar nicht vorhanden, es wird nur durch das rewrite-Modul in der Adresszeile des Browsers angezeigt, um eine "schöne" url zu erzeugen.

Der Browser kann das Bild nicht finden, denn er referenziert ab dem Ende der obigen Adresszeile so weiter, wie ich es in die header.php, sidebar.php oder footer.php usw. geschrieben habe.

Was da für eine Referenz erzeugt wird, kann man sehen, wenn man den nun erscheinenden Platzhalter mit der rechten Maustaste anklickt und im Kontextmenü auf "Eigenschaften" klickt, so habe ich das ganze auch herausgefunden.

Ich hatte ein kleines gif-Bildchen als Trennstrich in die Sidebar integriert. Das hat auch bei den Beiträgen und den statischen Seiten funktioniert, aber sobald eine Kategorie (bei mir "Thema" genannt) aufgerufen wurde, war der Trennstrich weg.

Das lag an der Referenzierung ".../category/...", also über ein Verzeichnis, das es physikalisch auf dem Server nicht gibt.

2.3. So geht es: relative Referenzierung mit php

Um ein Theme für alle Bedingungen fit zu machen, kann ich WordPress dazu bringen, die zum Theme gehörenden Elemente relativ aus dem Theme-Verzeichnis (.../themes/mein_theme/) heraus zu referenzieren. Dazu bietet WordPress diesen schönen template-tag an:

<?php bloginfo('stylesheet_directory'); ?>

Das "stylesheet_directory" ist in WordPress definiert und ist das Verzeichnis der style.css des Themes: ".../themes/mein_theme/".

Ein Bild, das zum Theme gehört und im Verzeichnis ".../themes/mein_theme/images/" hinterlegt ist, kann ich mit folgendem Code zuverlässig in die header.php, sidebar.php oder footer.php usw. einbinden:

<img src="<?php bloginfo('stylesheet_directory'); ?>
/images/bild.gif" alt="">

Nun kann ich mein Theme problemlos in andere WordPress Installationen einbinden oder grosszügig zum Download anbieten ;-) .

Suchbegriffe:

Referenzierung, Referenz, WordPress

WordPress,Referenzierung,Theme,Themes,relative Referenzierung,absolute Referenzierung,rewrite module,rewrite-module,php,code,Kategorie,category

Donnerstag, 27. September 2007, 19:12 Uhr

zum Kommentar-Eingabeformular (Kommentare überspringen) »


Schreibe einen Kommentar




Spamschutz

Das Ergebnis muss als Zahl (Ziffern) eingetragen werden.