Ich möchte Seitenvorlagendateien wie page-{slug}.php
in ein Unterverzeichnis innerhalb meines Themas verschieben, so dass WordPress sie automatisch erkennt. Wenn die Seitenvorlagen dieses Formulars nicht im Unterverzeichnis vorhanden sind, sollte WordPress auf die Standardregeln zum Laden von Vorlagen zurückgreifen. Wie kann ich das erreichen?
Hinweis 1: Diese Frage und die entsprechenden Antworten gelten allgemeiner für Seitenvorlagen, und dieser Link erwähnt template-parts/page
, was nicht dasselbe ist.
Hinweis 2: Ich habe mehrere page-{slug}.php
ähnliche Seitenvorlagendateien, daher möchte ich sie für eine übersichtlichere Dateiorganisation in ein Unterverzeichnis verschieben.
theme-development
themes
page-template
directory
Manifestator
quelle
quelle
Antworten:
So werden Seitenvorlagen geladen:
Nach dem Standard WordPress-Vorlagenhierarchie
page
lädt eine Anforderung eine Vorlage basierend auf der Priorität und der Benennung wie folgt:Custom Page Template
: falls im Seiteneditor definiert.page-{slug}.php
page-{url-encoded-slug}.php
: nur für Multi-Byte-Zeichen.page-{id}.php
page.php
singular.php
index.php
Unter diesen
singular.php
undindex.php
sind eigentlich keine Seitenvorlagen.singular.php
ist die Fallback-Vorlage für einzelne Beitragstypen undindex.php
die ultimative Fallback-Vorlage für alles, was eine WordPress-Vorlage laden soll. Die ersten fünf sind also Seitenvorlagen.So fügen Sie Vorlagendateien aus einem Unterverzeichnis innerhalb der Hierarchie ein:
Die WordPress-Kernfunktion
get_page_template()
generiert das erforderlichepage
Array für die Vorlagenhierarchie. Kurz bevor Sie genau entscheiden, welche Vorlagendatei aus der Hierarchie geladen werden soll, löst WordPress denpage_template_hierarchy
Filter-Hook aus. Der beste Weg, um ein Unterverzeichnis hinzuzufügen, nach dem WordPress suchen wirdpage-{slug}.php
automatisch Vorlagen , besteht darin, diesen Filter zu verwenden und die richtigen Dateinamen relativ zu diesem Unterverzeichnis in das Array der Seitenvorlagenhierarchie einzufügen.Für unseren Zweck fügen wir nun den
sub-directory/page-{slug}.php
Dateinamen unmittelbar zuvorpage-{slug}.php
in das Vorlagenhierarchie-Array ein, das an die Hooks-Rückruffunktion übergeben wird. Auf diese Weise lädt WordPresssub-directory/page-{slug}.php
Dateien, falls vorhanden, andernfalls folgt es der normalen Hierarchie zum Laden von Seitenvorlagen. Um die Konsistenz aufrechtzuerhalten, geben wir natürlich immer nochCustom Page Template
eine höhere Priorität als unseresub-directory/page-{slug}.php
Datei. Die geänderte Seitenvorlagenhierarchie wird also wie folgt:Custom Page Template
: falls im Seiteneditor definiert.sub-directory/page-{slug}.php
sub-directory/page-{url-encoded-slug}.php
: nur für Multi-Byte-Zeichen.page-{slug}.php
page-{url-encoded-slug}.php
: nur für Multi-Byte-Zeichen.page-{id}.php
page.php
Stichprobe
functions.php
:Wenn Sie diese Änderung nur für ein einzelnes Thema vornehmen möchten, können Sie den folgenden CODE in der
functions.php
Datei Ihres aktiven Themas verwenden:Beispiel-Plugin:
Wenn Sie dieselbe Organisation von Vorlagendateien in mehreren Themen verfolgen möchten, sollten Sie diese Funktion von Ihrem Thema trennen. In diesem Fall, anstatt das Thema zu ändern
functions.php
Datei mit dem obigen Beispiel-CODE zu ändern, ein einfaches Plugin mit demselben Beispiel-CODE erstellen.Speichern Sie den folgenden CODE mit einem Dateinamen, z. B.
page-slug-template-subdir.php
in Ihrem WordPress-plugins
Verzeichnis:Verwendungszweck:
quelle