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.

Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienst­leistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.

Verwandte Beiträge:

6 Kommentare

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

    wenn ja dann fehlt dir doch ein ?>
    oder bin ich jetzt ganz durch den wind?

  2. 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. 🙂

  3. 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

  4. 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.

  5. […] In der 2.1er Version hatte es ja einige Neuerungen gegeben. Perun hat eine kleine PHP-Abfrage entwickelt, um beide Versionen bedienen zu können. Vielen Dank dafür! […]

Kommentare sind geschlossen.