Część szablonu wewnątrz shortcode, nieoczekiwany skutek

Aug 16 2020

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

2 Howdy_McGee Aug 17 2020 at 00:25

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 inclub 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.phpplik do wyprowadzania treści posta i content-page.phpdo 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.