Spielereien mit WordPress 4.7 – die neue Theme-Vererbung

WordPress 4.7 – Theme-Vererbung
Keine Kommentare

WordPress 4.7 steht in den Startlöchern. Daher lohnt es sich bereits jetzt, ein bisschen damit zu experimentieren. Zum Teil direkt im Code und zum Teil in Form von ein paar Gedankenexperimenten, weil viele Features (Stand heute) noch nicht fertig sind. In diesem Teil beschäftigen wir uns mit dem neuen Feature der Theme-Vererbung.

Auf dem WordCamp Frankfurt habe ich bereits gezeigt, dass Theme-Vererbung – oder besser: Vererbung in Themes – per locate_template ganz leicht möglich ist. Darauf hat mich ein Core-Entwickler gebracht, und nun wurde das Konzept vervollständigt.

Theme-Vererbung in WordPress 4.7

In WordPress 4.7 wird der Community ein großer Wunsch erfüllt: Theme-Vererbung. Die Templates im Stammverzeichnis, wie header.php oder index.php vom Theme dürften vielen ein Begriff sein. Auch, dass WordPress an dieser Stelle bereits einige Mechanismen für eine Vererbung hat, jedoch nicht für Verzeichnisse, die weiter in die Tiefe gingen. Schade, dabei sehen Themes meist so aus:

WordPress 4.7: Theme-Vererbung

Das Standardantlitz eines Themes

Post Types, Shortcodes und Widgets sind sauber im /inc/-Ordner in einzelnen Dateien untergebracht. Nun fordert ein Stakeholder, dass das Widget „baz“ anders aussehen oder funktionieren soll als bisher. Natürlich wird ein Child Theme angelegt, welches in etwa so aussieht:

WordPress 4.7: Child Themes

Der Aufbau eines Child Themes

Fertig, das war es! Etwas anderer Content in die /inc/widget-baz.php, und schon sieht das Widget anders aus. Der Overhead mit der functions.php, deregistrieren des Widgets und neu registrieren eines eigenen – das alles soll erspart bleiben. Besser ist es, einfach die Datei anzulegen, und das (gekaufte) Parent Theme soll von selbst merken, was los ist. So bin ich es aus anderen Frameworks gewohnt, warum also nicht auch in WordPress? Das ist schon lange keine Utopie mehr und mit Version 4.7 wird es noch besser.

Dieser Artikel ist der erste von fünf in unserer WordPress-Themenwoche. In anderen Artikeln geht es um allgemeine Neuerungen & Proposals, Bulk Actions, Shortcodes und ein eigenes Event-System mit WP_Hook.

Vier neue Funktionen

Für solche Fälle gibt es eine Hand voll neuer Funktionen mit etwas Magie:

  • get_theme_file_uri
  • get_parent_theme_file_uri
  • get_theme_file_path
  • get_parent_theme_file_path

Die Namen sprechen für sich. Ein Aufruf wie get_theme_file_path("inc/widget-baz.php") sucht die Datei zuerst im Child Theme, und falls sie dort nicht gefunden werden kann auch im Parent Theme. Da diese Datei im Child Theme abgelegt wurde, wird sie auch von dort bezogen.

Anders wäre es bei einem get_theme_file_path("inc/shortcode-bar.php")

… und ein Filter

Zusätzlich gibt es noch einen Filter, der für Plug-in-Autoren nützlich sein wird. Von WooCommerce ist zum Beispiel bekannt, dass es eigene Templates für Warenkorb und Check-out mitbringt und diese von einem Theme überschrieben werden können. Dafür nutzt es eigene Funktionen und viel drumherum.

WordPress 4.7 hat in den zuvor genannten Funktionen Filter dafür. Einer davon kann für jedes Plug-in eine vergleichbare Funktionsweise liefern:

add_filter(
  'theme_file_path',
  function ( $path, $file ) {
    if ( $path ) {
      // da wurde bereits was gefunden => lassen wir so
      return $path;
    }

    // Template aus eigenem Plugin anbieten.
    if ( file_exists ( WP_PLUGIN_DIR . '/' . $file ) ) {
      return WP_PLUGIN_DIR . '/' . $file;
    }
  }
);

Diese Funktion erlaubt einem Theme, die zum Plug-in mitgelieferten Dateien zu überschreiben. Als Beispiel soll dieser Aufruf im Plug-in dienen:

if ( $path = get_theme_file_path( 'mein-plugin/ein-template.php' ) ) {
  require_once $path;
}

Schon rennt WordPress los und sucht die Datei wie folgt:

wp-content/themes/child-theme/mein-plugin/ein-template.php
wp-content/themes/parent-theme/mein-plugin/ein-template.php
wp-content/plugins/mein-plugin/ein-template.php

WordPress Spezial

Entwickler Magazin Spezial Vol. 10: WordPress
Alles rund um WordPress im Entwickler Spezial Vol. 10 – ab 18.11.2016 im Handel.

Ist doch super, dass das Template vom Plug-in direkt im Theme überschrieben werden kann! Am besten wäre dieser letzte Filter auch gleich im WordPress-Core enthalten, damit Plug-ins und Themes sich gegenseitig viel besser ergänzen können.

Ich werde in meinen Plug-ins und Themes fortan definitiv auf diese Technik zurückgreifen. Hoffentlich sind andere Theme-Autoren ähnlich begeistert davon und bieten die sehr bequeme moderne Vererbung von Templates ebenfalls an.

Nach diesem Ausflug in die Welt der Themes beschäftigen wir uns morgen im letzten Teil unserer WordPress-Themenwoche mit einem Event-System, das wir mit WP_Hook realisieren werden.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -