Ist es möglich, die Liste der Seitenvorlagen zu manipulieren?

Nachdem ich diese Frage beantwortet hatte, fragte ich mich, ob es möglich ist, die Dropdown-Liste mit möglichen Seitenvorlagen zu bearbeiten, die verfügbar sind, wenn Sie eine Seite bearbeiten. WordPress leitet diese Liste von den Vorlagendateien ab, die im Stammverzeichnis verfügbar sind (wie page.php , page-onecolumn.php , page-about-us.php ). Es scheint nicht die Liste in der database zu speichern.

Ich könnte mir vorstellen, dass es legitime Gründe gibt, dies zu wollen, zum Beispiel wenn Sie zehn Seitenvorlagen haben, aber den Zugriff auf einige von ihnen für Nicht-Admin-Benutzer einschränken wollen. Oder vielleicht möchten Sie Vorlagen dynamisch über eine Optionsseite erstellen, sodass Sie die Liste erweitern möchten.

Solutions Collecting From Web of "Ist es möglich, die Liste der Seitenvorlagen zu manipulieren?"

Das Arbeitspferd ist WP_Theme::get_page_templates() (umhüllt von der get_page_templates() ). Wenn Sie die Quelle auschecken, sehen Sie:

 /** * Filter list of page templates for a theme. * * @since 3.9.0 * @since 4.4.0 Converted to allow complete control over the `$page_templates` array. * * @param array $page_templates Array of page templates. Keys are filenames, * values are translated names. * @param WP_Theme $this The theme object. * @param WP_Post|null $post The post being edited, provided for context, or null. */ return (array) apply_filters( 'theme_page_templates', $page_templates, $this, $post ); 

Beispiel:

 function wpse_226324_page_templates( $templates ) { // Remove tpl-home.php template unset( $templates['tpl-home.php'] ); // Add custom template $templates['tpl-custom.php'] = 'Custom Template'; return $templates; } add_filter( 'theme_page_templates', 'wpse_226324_page_templates' ); 

Siehe auch theme_page_templates Code-Referenz .