Je souhaite déplacer les fichiers de modèle de page comme page-{slug}.php
vers un sous-répertoire de mon thème, de manière à ce que WordPress les reconnaisse automatiquement. Si les modèles de page dudit formulaire n'existent pas dans le sous-répertoire, alors WordPress devrait revenir aux règles de chargement des modèles par défaut. Comment puis-je y parvenir?
Note-1: Cette question et les réponses correspondantes sont plus génériques pour les modèles de page et ce lien mentionne template-parts/page
, ce qui n'est pas la même chose.
Note-2: J'ai plusieurs page-{slug}.php
fichiers de modèle de page similaires, donc je veux les déplacer vers un sous-répertoire pour une organisation des fichiers plus ordonnée.
theme-development
themes
page-template
directory
manifestant
la source
la source
Réponses:
Comment les modèles de page sont chargés:
Selon la hiérarchie de modèles WordPress par défaut , une
page
demande charge un modèle en fonction de la priorité et du nom, comme indiqué ci-dessous:Custom Page Template
: si défini dans l'éditeur de page.page-{slug}.php
page-{url-encoded-slug}.php
: uniquement pour les caractères multi-octets.page-{id}.php
page.php
singular.php
index.php
Parmi ceux-ci,
singular.php
et neindex.php
sont pas réellement des modèles de page.singular.php
est le modèle de secours pour tous les types de publication etindex.php
le modèle de secours ultime pour tout ce qu'un modèle WordPress est censé charger. Les cinq premiers sont donc des modèles de page.Comment injecter des fichiers de modèle à partir d'un sous-répertoire de la hiérarchie:
La fonction principale de WordPress
get_page_template()
génère lepage
tableau de hiérarchie de modèles nécessaire et juste avant de décider exactement quel fichier de modèle à charger à partir de la hiérarchie, WordPress déclenche lepage_template_hierarchy
crochet du filtre. Donc, la meilleure façon d'ajouter un sous-répertoire, où WordPress rechercherapage-{slug}.php
automatiquement les modèles, est d'utiliser ce filtre et d'injecter les noms de fichiers appropriés par rapport à ce sous-répertoire dans le tableau de hiérarchie des modèles de page.Maintenant, pour notre objectif, nous allons injecter le
sub-directory/page-{slug}.php
nom de fichier juste avantpage-{slug}.php
dans le tableau de hiérarchie de modèles passé à la fonction de rappel des hooks. De cette façon, WordPress chargera lesub-directory/page-{slug}.php
fichier s'il existe, sinon il suivra la hiérarchie de chargement de modèle de page normale. Bien sûr, pour maintenir la cohérence, nous donnerons toujoursCustom Page Template
une priorité plus élevée par rapport à notresub-directory/page-{slug}.php
fichier. Ainsi, la hiérarchie de modèle de page modifiée deviendra:Custom Page Template
: si défini dans l'éditeur de page.sub-directory/page-{slug}.php
sub-directory/page-{url-encoded-slug}.php
: uniquement pour les caractères multi-octets.page-{slug}.php
page-{url-encoded-slug}.php
: uniquement pour les caractères multi-octets.page-{id}.php
page.php
Exemple de
functions.php
CODE:Si vous prévoyez d'effectuer cette modification uniquement sur un seul thème, vous pouvez utiliser le CODE suivant dans le
functions.php
fichier de votre thème actif :Exemple de plugin:
Si vous souhaitez suivre la même organisation de fichiers de modèle dans plusieurs thèmes, il est préférable de garder cette fonctionnalité distincte de votre thème. Dans ce cas, au lieu de modifier le
functions.php
fichier du thème avec l'exemple de CODE ci-dessus, vous devrez créer un plugin simple avec le même exemple de CODE.Enregistrez le CODE suivant avec un nom de fichier, par exemple
page-slug-template-subdir.php
dans votreplugins
répertoire WordPress :Usage:
la source