Parte del modello all'interno dello shortcode, risultato inaspettato
Sto tentando di chiamare una parte del modello tramite uno shortcode. Ho letto tutto su come farlo più e più volte su questo sito e tuttavia dopo aver provato un certo numero di cose non sono ancora in grado di chiamare una semplice stringa di tempo di eco php. Il nome del file è test-one.php. Ecco cosa ho provato:
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');
Il codice della parte del modello è
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
Sembra che dovrebbe funzionare, no? Dove sto sbagliando?
Risposte
La get_template_part()
funzione non assume alcun nome di directory, è necessario fornirlo esplicitamente. È anche relativo alla directory del tema attivo. Quindi in molti dei tuoi esempi stava cercando il modello nella radice del tuo tema attivo. Il formato corretto sarebbe:
get_template_part( 'template-parts/test-one' );
Se lo desideri, puoi rinominare la cartella in inc
o includes
- è arbitrario. Hai solo bisogno di riflettere questo cambiamento nella chiamata di funzione.
In una nota a margine, WordPress ti consente di passare un secondo parametro e cercherà i file uniti da un trattino. Ad esempio, questo funzionerà anche:
get_template_part( 'template-parts/test', 'one' );
Il vantaggio di ciò è che consente di avere più "tipi" di una parte specifica. Potresti avere un content-post.php
file per l'output del contenuto del tuo post e un content-page.php
per l'output del contenuto della tua pagina. Poi, nel tuo tema che si potrebbe chiamare il modello da:
get_template_part( 'template-parts/content', $post->post_type );
Gli permette solo di essere un po 'più dinamico.
Un'altra nota a margine. Ogni volta che hai problemi con questi tipi di funzioni puoi sempre utilizzare:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
Questo produrrà il percorso del modello in cui WordPress sta tentando di accedere al modello.