WordPress & Webwork

Themes für mehrere Versionen fit machen

Wenn man für WordPress Themes entwickelt dann muss man an manchen Stellen die Template-Tags für verschiedene Versionen berücksichtigen. Die Entwickler haben in den Versionsstrang 2.1.x nicht nur neue Template-Tags eingeführt sondern, ganz "schlau", alte unwirksam gemacht. Ganz schlau. Das ist einer der Gründe warum ich die Version 2.1.x noch nicht in mein Herz geschlossen habe … mal davon abgesehen das diese Version auf mich noch nicht den stabilen Eindruck macht wie z.B. die Version 2.0.9.

Wie dem auch sei, an manchen Stellen z.B. wie beim Aufruf der Blogroll oder beim Aufruf der Kategorien muss man die verschiedenen Versionen berücksichtigen. Die einfachste Möglichkeit ist es zwei verschiedene Themes zu machen. Eine für den 2.0.x-Strang und eine für den 2.1.x-Strang. Das ist aber unnötige Arbeit und eine unnötige Fehlerquelle.

Daher habe ich mich auf die Suche nach einer Lösung begeben und ich dachte da an eine Abfrage. Die Fragestellung im WordPress-Forum ergab kein Ergebnis und daher habe ich mir mal diverse Plugins angeschaut und die Lösung der Probleme ist $wp_version anzusprechen. Hier ein Beispiel, wie man die Kategorien für die Version 2.0.x und 2.1 aufruft:

<?php if (($wp_version < "2.1")) {
wp_list_cats('sort_column=name&optioncount=1');
}
if (($wp_version >= "2.1")) {
wp_list_categories('sort_column=name&show_count=1&title_li');
} ?>

Der erste Teil des Code-Abschnitts (if (($wp_version < "2.1"))) wird in allen Versionen eingebaut, die kleiner als 2.1 sind und der zweite Code-Abschnitt (ab if (($wp_version >= "2.1"))) wird in allen Versionen eingebaut die 2.1 oder größer sind. Ich werde daher in den nächsten Tagen alle Themes so ausrüsten, es ist Kokolores zwei verschiedene Themes-Versionen zu pflegen, wenn man in einem Theme mehrere WP-Versionen berücksichtigen kann.

Nachtrag: eine weitere Möglichkeit (aus dem Support-Forum) wie man ein und das selbe WordPress-Theme für mehrere Versionen fit machen kann ist die Abfrage ob eine Funktion überhaupt vorhanden ist:

<?php if (function_exists('wp_list_cats')) {
wp_list_cats('sort_column=name&optioncount=1');
}
else {
wp_list_categories('sort_column=name&show_count=1&title_li');
} ?>

Im Prinzip ist das gleiche wie wenn man abfragt ob ein Plugin vorhanden ist. Dies scheint mir sicherer zu sein, da mich Garvin darauf hingewiesen hat, dass die Versions-Abfrage, so wie ich sie oben vorgestellt habe, evtl. bei z.B. Beta-Versionen nicht funktionieren könnte.

6 Reaktion(en)

  1. Perun

    Hallo Jared,

    öhm für mich ist das EIN codeschnipsel
    kann keine 2 erkennen

    Richtig, es ist auch nur ein Codeschnippsel. Aber dieser besteht aus zwei Abschnitten. Teil eins besteht aus dem ersten if-Konstrukt und der zweite ab dem zweiten if-Konstrukt.

    wenn ja dann fehlt dir doch ein ?>

    Nö, es funktioniert so ganz prima.

    oder bin ich jetzt ganz durch den wind?

    Das kann ich dir nicht sagen, da ich dich nicht kenne. 🙂

  2. Garvin

    Ich würde davon abraten, die IF-Abfrage so einzusetzen wie Du sie empfehlst. Wenn nämlich $wp_version mal unternummern wie "-1" oder "-alpha" enthält, dann wird dieser Test recht sicher fehlschlagen.

    Sicherher ist es, die Funktion "version_compare" von PHP zu Hilfe zu nehmen. Die kann recht verlässlich Versionsnummern vergleichen und berücksichtigt dabei diverse Konventionen.

    Mehr dazu und auch Codebeispiele gibt es in der Doku auf PHP.net

  3. Ralf

    So langsam benötigt man für WP-Themes eine Übersetzungsfunktion. Ähnlich dem gettext für Sprache. Ein weiterer Vorteil wäre u.U. das man Templates von anderen CMS-Systemen leichter anpassen und übernehmen könnte.

  4. Pingback: Flexibilität für meine Templates - Gabis Wordpress-Templates

Die Kommentare in diesem Beitrag sind geschlossen.

✉ WordPress-Newsletter ✉

Tipps und News als E-Mail in deinem Postfach? Dann abonniere einfach den ersten deutsch­sprachigen Word­Press-Newsletter:


Der Newsletter ist hinterher jederzeit abbestellbar.

Eintragen!