Quiero mover archivos de plantilla de página como page-{slug}.php
a un subdirectorio dentro de mi tema, de manera que WordPress los reconozca automáticamente. Si las plantillas de página de dicho formulario no existen dentro del subdirectorio, entonces WordPress debería recurrir a las reglas predeterminadas de carga de plantillas. ¿Cómo puedo lograr eso?
Nota-1: Esta pregunta y las respuestas correspondientes son más genéricas para las plantillas de página y este enlace menciona template-parts/page
, que no es lo mismo.
Nota-2: Tengo varios page-{slug}.php
archivos de plantillas de página similares, por lo que quiero moverlos al subdirectorio para una organización de archivos más ordenada.
theme-development
themes
page-template
directory
manifestante
fuente
fuente
Respuestas:
Cómo se cargan las plantillas de página:
De acuerdo con la Jerarquía de plantillas de WordPress predeterminada , una
page
solicitud carga una plantilla basada en la prioridad y el nombre como se indica a continuación:Custom Page Template
: si está definido en el editor de página.page-{slug}.php
page-{url-encoded-slug}.php
: solo para caracteres de varios bytes.page-{id}.php
page.php
singular.php
index.php
Entre estos,
singular.php
y en realidad noindex.php
hay plantillas de página. es la plantilla de respaldo para cualquier tipo de publicación individual y es la plantilla de respaldo definitiva para cualquier cosa que se supone que cargue una plantilla de WordPress. Entonces, los primeros cinco son plantillas de página.singular.php
index.php
Cómo inyectar archivos de plantilla desde un subdirectorio dentro de la jerarquía:
La función principal de WordPress
get_page_template()
genera lapage
matriz de jerarquía de plantilla necesaria y, justo antes de decidir exactamente qué archivo de plantilla cargar desde la jerarquía, WordPress dispara elpage_template_hierarchy
gancho de filtro. Entonces, la mejor manera de agregar un subdirectorio, donde WordPress buscarápage-{slug}.php
plantillas automáticamente, es usar este filtro e inyectar nombres de archivo adecuados en relación con ese subdirectorio dentro de la matriz de jerarquía de plantillas de página.Ahora, para nuestro propósito, inyectaremos el
sub-directory/page-{slug}.php
nombre del archivo justo antespage-{slug}.php
dentro de la matriz de jerarquía de plantilla pasada a la función de devolución de llamada de ganchos. De esa manera, WordPress cargará elsub-directory/page-{slug}.php
archivo si existe, de lo contrario seguirá la jerarquía normal de carga de plantillas de página. Por supuesto, para mantener la coherencia, aún le daremosCustom Page Template
una mayor prioridad en comparación con nuestrosub-directory/page-{slug}.php
archivo. Entonces la jerarquía de plantilla de página modificada se convertirá en:Custom Page Template
: si está definido en el editor de página.sub-directory/page-{slug}.php
sub-directory/page-{url-encoded-slug}.php
: solo para caracteres de varios bytes.page-{slug}.php
page-{url-encoded-slug}.php
: solo para caracteres de varios bytes.page-{id}.php
page.php
functions.php
CÓDIGO de muestra :Si planea hacer este cambio solo en un solo tema, puede usar el siguiente CÓDIGO en el
functions.php
archivo de su tema activo :Plugin de muestra:
Si desea seguir la misma organización de archivos de plantilla en varios temas, lo mejor es mantener esta función separada de su tema. En ese caso, en lugar de modificar el
functions.php
archivo del tema con el CÓDIGO de muestra anterior, deberá crear un complemento simple con el mismo CÓDIGO de muestra.Guarde el siguiente CÓDIGO con un nombre de archivo, por ejemplo,
page-slug-template-subdir.php
dentro de suplugins
directorio de WordPress :Uso:
fuente