Will man für Seiten in WordPress unterschiedliche Templates verwenden, die Inhalte jeweils anders darstellen, kann man im Theme entsprechende Dateien nach dem Schema page-<name>.php anlegen, wobei <name> dem Namen des Templates entspricht. Das standardmäßig ausgewählte Template bleibt dabei immer dasjenige, das unter der page.php zu finden ist. Doch was, wenn man das ändern möchte?

Während meiner Recherche, die nicht sonderlich viele Ergebnisse enthielt, fand ich die Antworten bei Stack Overflow am hilfreichsten. Während sich die meisten Antworten dabei noch um die Meta-Box drehten, die mit dem Block-Editor mittlerweile nicht mehr so angepasst werden kann, gab es auch eine Antwort bezüglich des Block-Editors dazu.

Diese führt allerdings dazu, dass alle Seiten fortan das neue Standard-Template verwenden und auch beim Aktualisieren bestehender Seiten selbige das neue Template erhalten.

Ich wollte aber lediglich das standardmäßig vorausgewählte Template ändern, ohne die Einstellungen von bestehenden Seiten automatisch zu verändern. Ebenfalls war es wichtig, dass man das Template jederzeit ändern kann.

Damit fiel der Lösungsansatz über den Filter rest_prepare_page weg, da dort nicht mehr zu erkennen war, ob es sich um eine soeben neu erstellte Seite handelt oder eine bestehende. Dennoch war das ein guter Ansatz, denn ich ich erkannte so, dass direkt beim Öffnen des Block-Editors über „Erstellen“ eine neue Seite in der Datenbank angelegt wird. Über Sinn oder Unsinn darüber kann natürlich diskutiert werden, aber das führte mich letztendlich dazu, einen Hook innerhalb der wp_insert_post()-Funktion zu verwenden.

Über den Filter save_post_page kann ich mir als dritten Parameter übergeben lassen, ob der Inhalt aktualisiert wird oder nicht. Wenn er nicht aktualisiert wird, kann ich dementsprechend den Inhalt des Post-Metafeldes _wp_page_template für diesen Inhalt zu meinem gewünschten Template ändern.

/**
 * Set default page template on first page creation.
 * 
 * @param	int			$post_id The post ID
 * @param	\WP_Post	$post The post object
 * @param	bool		$update Whether the post is getting updated
 */
function my_set_default_page_template( $post_id, $post, $update ) {
	if ( ! $update ) {
		update_post_meta( $post_id, '_wp_page_template', 'page-<name>.php' );
	}
}

add_action( 'save_post_page', 'my_set_default_page_template', 10, 3 );
Code-Sprache: PHP (php)

Dadurch, dass das direkt passiert, wenn man auf „Erstellen“ klickt und somit bevor der Block-Editor initialisiert wird, wird auch dieses Template im Block-Editor in der Sidebar direkt vorausgewählt. Und dadurch, dass es nur beim Erstellen einer neuen Seite ausgeführt wird, kann man das Template danach jederzeit über die Sidebar auch erfolgreich ändern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert