Estoy trabajando en un tema secundario, prefiero no anular los archivos de plantilla principales para mantener la simplicidad del tema secundario y minimizar la cantidad de código y mantenimiento a lo largo del tiempo.
En el bucle, la plantilla index.php en el tema principal usa:
get_template_part( 'content' );
lo que traerá contenido.php , estoy buscando que se comporte más get_template_part( 'content', get_post_format() );
o similar para traer diferentes plantillas como content-aside.php , etc., sin crear un index.php en el tema secundario para sobrescribir el padre para un cambio de línea simple.
get_template_part()
consiste en:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Entonces hay una acción disponible, en mi caso llamada get_template_part_content
Puedo conectarme a la acción con algo como:
add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );
function child_post_styles ( $slug, $name ) {
if( false == $name ){
$name = get_post_format();
$templates = array();
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
}
Obviamente, esto da como resultado una duplicación posterior, una de mi función enganchada, que puede mostrar la plantilla deseada, y la otra de la locate_template
llamada normal enget_template_part()
Tengo problemas para encontrar una manera de lograr esto sin duplicación, o sin finalizar el procesamiento de la página justo después de servir mi parte de plantilla haciendo algo estúpido como un break
oexit
fuente
Respuestas:
No hay gancho para hacer esto. Copie index.php al tema secundario y haga que la línea simple cambie. Además, dígale al autor del tema principal que deben hacer el mismo cambio en su tema, para mayor flexibilidad.
fuente
ob_start
dentro y luegoob_end
en algún gancho para que se ejecute pero nunca repita, lo que generalmente es lo suficientemente bueno. O puede usar exit () para forzar la terminación de PHP (después de agregar manualmente todo lo que falta: pie de página, etc.)Creo que no es exactamente posible de la manera que quieres lograr. Es realmente molesto no tener un filtro allí para alterar los nombres de los archivos de plantilla :(
Sin embargo, tengo una solución al respecto. Deje uso
content.php
para la comparación.No he usado el segundo argumento de
get_template_part
función, más bien pasé el sufijo en el primer argumento para evitar llamadas infinitas en elcontent.php
archivo si no hay'content-'. $format
archivo.fuente
Bueno, hay SOLUCIÓN :
pero piense detenidamente, en qué gancho debe insertar esa acción ... para obtener manualmente la ubicación, use
locate_template('content-header.php', false);
fuente
Si desea obtener un archivo llamado content-aside.php, llame a la función de esta manera:
El segundo parámetro es el nombre del archivador después del guión. Si su archivo está en un subdirectorio (templates / content-aside.php):
¿Es eso lo que estás buscando hacer?
fuente