Bestimmte Core Version als minimale Anforderung im WordPress Theme voraussetzen

In diesem Beitrag erkläre ich, wie du als Entwickler eine bestimmte Core Version als minimale Anforderung und Vorraussetzung in deinem WordPress Theme festlegen kannst. Wir blicken dabei einfach auf die technische Umsetzung im neuen Standard-Theme TwentySeventeen.

Als Entwickler möchte ich in meinen WordPress Themes gerne die neuesten Features und Funktionen des Cores einsetzen können. Mit so ziemlich jedem Major Release der letzten Jahre wurden nützliche Template Tags, Hooks oder komplett neue Funktionalität wie Logos und Starter Content für Theme Developer eingeführt.

Abwärtskompatible Nutzung von neuen Funktionen

Die erste Möglichkeit ist, mit zusätzlichen Abfragen und function_exists Wrappern zu überprüfen, ob die gewünschte Funktionalität zur Verfügung steht.

// Check if WordPress Core Logo is available
if ( function_exists( 'the_custom_logo' ) ) {
	the_custom_logo();
} else {
	// Display old logo option for WordPress 4.4 and earlier
}

Mit dem Code Schnipsel wird das Theme Logo des Cores angezeigt, welches ab WordPress 4.5 zur Verfügung steht. Für frühere Versionen kann beispielsweise ein Logo angezeigt werden, welches mit einer Customizer Option des Themes hochgeladen wurde.

Als Entwickler kann ich damit die neue Funktion the_custom_logo() des Cores verwenden, und gleichzeitig mein Theme mit älteren WordPress Versionen kompatibel halten.

Der große Nachteil dieser Methode ist, dass zusätzliche Fallback Funktionen notwendig sind und dadurch der Code unnötig aufgebläht wird. Zusätzlich ist WordPress so konzipiert, dass Nutzer eigentlich immer die aktuellste Version einsetzen sollten. Es gibt keinen triftigen Grund, eine veraltete Core Version zu nutzen.

Bestimmte Core Version als minimale Vorrausetzung festlegen

Wesentlich eleganter ist deshalb die zweite Möglichkeit, mit der eine bestimmte WordPress Core Version als Mindestanforderung für das WordPress Theme vorausgesetzt wird.

Alle Default Themes (TwentyFifteen, TwentySixteen, usw.) setzen auf diese Methode.

Zur Veranschaulichung möchte ich deshalb einen Blick auf das neue Standard-Theme TwentySeventeen werfen. Das Theme setzt den Einsatz von WordPress 4.7 voraus und kann nicht mit früheren Versionen von WordPress verwendet werden.

Technisch umgesetzt ist das mit folgender Anweisung:

/**
 * Twenty Seventeen only works in WordPress 4.7 or later.
 */
if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '<' ) ) {
	require get_template_directory() . '/inc/back-compat.php';
	return;
}

Diese steht ganz am Anfang in der functions.php des Themes.

Mit $GLOBALS['wp_version']erhalten wir die aktuelle Version des Cores. Mit der PHP Funktion version_compare wird diese mit der vorausgesetzten Version von 4.7-alpha verglichen. Bei einer zu niedrigen WordPress Version wird die Datei /inc/back-compat.php geladen und mit return die weitere Ausführung der functions.php des Themes abgebrochen.

Die nun geladene Datei enthält drei Funktionen, welche die Installation und Ausführung des Themes in früheren WordPress Versionen verhindert.

Funktion 1 blockt die Aktivierung des Themes und wechselt zurück zum Standard-Theme der verwendeten Core Version.

/**
 * Prevent switching to Twenty Seventeen on old versions of WordPress.
 *
 * Switches to the default theme.
 *
 * @since Twenty Seventeen 1.0
 */
function twentyseventeen_switch_theme() {
	switch_theme( WP_DEFAULT_THEME );
	unset( $_GET['activated'] );
	add_action( 'admin_notices', 'twentyseventeen_upgrade_notice' );
}
add_action( 'after_switch_theme', 'twentyseventeen_switch_theme' );

Die anderen beiden Funktionen verhindern eine Ausführung des Customizers und der Theme Vorschau, bei denen ein Theme ebenfalls ausgeführt werden würde, obwohl es nicht aktiviert ist.

Der Nutzer erhält bei allen drei Funktionen die gleiche Fehlermeldung:

sprintf( __( 'Twenty Seventeen requires at least WordPress version 4.7. You are running version %s. Please upgrade and try again.', 'twentyseventeen' ), $GLOBALS['wp_version'] );

Die komplette Datei kannst du im Github Repo des Themes studieren.

Fazit

Mit dem Voraussetzen einer minimalen Core Version für das WordPress Theme können Entwickler die neuesten Core Features einsetzen, ohne jede neue Funktion mit zusätzlichen function_exists Abfragen einschließen zu müssen.

Zudem werden PHP Fehler vermieden, falls Nutzer das Theme mit früheren Versionen installieren wollen. Stattdessen wird eine Meldung mit Bitte um ein Core Update angezeigt.