Parte de la plantilla dentro del código corto, resultado inesperado
Estoy intentando llamar a una parte de la plantilla a través de un código corto. He leído todo sobre cómo hacer esto una y otra vez en este sitio y, sin embargo, después de haber probado una serie de cosas, todavía no puedo llamar a una simple cadena de tiempo de eco php. El nombre del archivo es test-one.php. Esto es lo que he probado:
function test_2( $attr ) {
ob_start();
get_template_part( 'test', 'one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
function test_2( $attr ) {
ob_start();
get_template_part( 'wp-content/themes/theme-name/template-parts/test-one' );
return ob_get_clean();
}
add_shortcode('test2', 'test_2');
El código de parte de la plantilla es
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
Parece que debería funcionar, ¿no? ¿Dónde me equivoco?
Respuestas
La get_template_part()
función no asume ningún nombre de directorio, debe proporcionarlo explícitamente. También es relativo al directorio de temas activos. Entonces, en muchos de sus ejemplos buscaba la plantilla en la raíz de su tema activo. El formato correcto sería:
get_template_part( 'template-parts/test-one' );
Si lo desea, puede cambiar el nombre de la carpeta a inc
o includes
, es arbitrario. Solo necesita reflejar este cambio en la llamada a la función.
En una nota al margen, WordPress le permite pasar un segundo parámetro y buscará archivos unidos por un guión. Por ejemplo, esto también funcionará:
get_template_part( 'template-parts/test', 'one' );
El beneficio de esto es que le permite tener múltiples "tipos" de una pieza específica. Puede tener un content-post.php
archivo para generar el contenido de su publicación y un archivo para generar el contenido content-page.php
de su página. Luego, en su tema, podría llamar a su plantilla por:
get_template_part( 'template-parts/content', $post->post_type );
Solo permite que sea un poco más dinámico.
Otra nota al margen. Siempre que tenga problemas con este tipo de funciones, siempre puede utilizar:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
Esto generará la ruta de la plantilla por la que WordPress está intentando acceder a la plantilla.