Część szablonu wewnątrz shortcode, nieoczekiwany skutek
Próbuję wywołać część szablonu za pomocą skrótu. Czytałem wszystko o tym, jak to zrobić w kółko na tej stronie, a mimo to po wypróbowaniu wielu rzeczy nadal nie jestem w stanie wywołać prostego ciągu czasu echa php. Nazwa pliku to test-one.php. Oto co próbowałem:
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');
Kod części szablonu to
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
Wygląda na to, że powinno działać, prawda? Gdzie się mylę?
Odpowiedzi
get_template_part()
Funkcja nie ponoszą żadnej nazwy katalogu, trzeba jednoznacznie dostarczenia go. Jest to również względne w stosunku do aktywnego katalogu motywów. Więc w wielu twoich przykładach szukał szablonu w katalogu głównym twojego aktywnego motywu. Prawidłowy format to:
get_template_part( 'template-parts/test-one' );
Jeśli chcesz, możesz zmienić nazwę folderu na inc
lub includes
- to dowolne. Musisz tylko odzwierciedlić tę zmianę w wywołaniu funkcji.
Na marginesie, WordPress umożliwia przekazanie drugiego parametru i będzie szukał plików połączonych myślnikiem. Na przykład to również zadziała:
get_template_part( 'template-parts/test', 'one' );
Zaletą tego jest to, że pozwala na posiadanie wielu „typów” określonej części. Możesz mieć content-post.php
plik do wyprowadzania treści posta i content-page.php
do wyprowadzania zawartości strony. Następnie w temacie ty mógł zadzwonić do szablonu poprzez:
get_template_part( 'template-parts/content', $post->post_type );
Po prostu pozwala mu być nieco bardziej dynamicznym.
Kolejna uwaga dodatkowa. Za każdym razem, gdy masz problemy z tego rodzaju funkcjami, możesz zawsze użyć:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
Spowoduje to wyświetlenie ścieżki szablonu, którą WordPress próbuje uzyskać do szablonu przez.