Часть шаблона внутри шорткода, неожиданный результат
Я пытаюсь вызвать часть шаблона с помощью шорткода. Я читал все о том, как это сделать снова и снова на этом сайте, но, попробовав несколько вещей, все еще не могу вызвать простую строку времени эха php. Имя файла - test-one.php. Вот что я пробовал:
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');
Код части шаблона:
<?php
echo "Current as of <br> ".date("m-d-Y h:i:sa");
Похоже, это должно работать, не так ли? Где я ошибаюсь?
Ответы
get_template_part()
Функция не берет на себя имя каталога, вы должны явно поставить его. Это также относительно каталога активной темы. Итак, во многих ваших примерах шаблон искался в корне вашей активной темы. Правильный формат:
get_template_part( 'template-parts/test-one' );
Если хотите, можете переименовать папку в inc
или includes
- это произвольно. Вам просто нужно отразить это изменение в вызове функции.
Кстати, WordPress позволяет передавать второй параметр и будет искать файлы, соединенные тире. Например, это тоже будет работать:
get_template_part( 'template-parts/test', 'one' );
Преимущество этого в том, что это позволяет вам иметь несколько «типов» конкретной детали. У вас может быть content-post.php
файл для вывода содержимого вашего сообщения и файл для вывода содержимого content-page.php
вашей страницы. Затем в своей теме вы можете вызвать свой шаблон:
get_template_part( 'template-parts/content', $post->post_type );
Просто позволяет сделать его немного более динамичным.
Еще одно примечание. Каждый раз, когда у вас возникают проблемы с такими функциями, вы всегда можете использовать:
add_action( 'init', function() {
$template = locate_template( $template_string_here ); printf( '<pre>%s</pre>', print_r( $template, 1 ) );
die( 'end' );
} );
Это выведет путь к шаблону, по которому WordPress пытается получить доступ к шаблону.