Я работаю над дочерней темой, я настоятельно предпочитаю не переопределять основные файлы шаблонов, чтобы сохранить простоту дочерней темы, а также минимизировать объем кода и обслуживания с течением времени.
В цикле шаблон index.php в родительской теме использует:
get_template_part( 'content' );
который привнесет в content.php , я смотрю, чтобы он вел себя более похожим get_template_part( 'content', get_post_format() );
или похожим, чтобы добавить различные шаблоны, такие как content-aside.php и т. д., без создания index.php в дочерней теме для перезаписи родитель для изменения одной строки.
get_template_part()
состоит из:
function get_template_part( $slug, $name = null ) {
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
Итак, в моем случае доступно действие get_template_part_content
Я могу подключиться к действию с чем-то вроде:
add_action( 'get_template_part_content', 'child_post_styles', 10, 2 );
function child_post_styles ( $slug, $name ) {
if( false == $name ){
$name = get_post_format();
$templates = array();
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
}
Это, очевидно, приводит к дублированию постов, одна из моих подключенных функций, которая может отображать нужный шаблон, а другая из обычного locate_template
вызова вget_template_part()
У меня проблемы с поиском способа сделать это без дублирования или без завершения рендеринга страницы сразу после обработки части шаблона, выполнив что-то глупое, например, break
илиexit
источник
Ответы:
Там нет крючка, чтобы сделать это. Скопируйте index.php в дочернюю тему и внесите изменения в одну строку. Кроме того, скажите автору родительской темы, что они должны сделать то же самое изменение в своей теме для гибкости.
источник
ob_start
внутри него иob_end
в некотором более позднем хуке, чтобы он выполнялся, но никогда не отражался, что обычно достаточно хорошо. Или вы можете использовать exit () для принудительного завершения PHP (после того, как вы вручную добавите все, что еще отсутствует: нижний колонтитул и т. Д.)Я думаю, что это не совсем так, как вы хотите достичь. Действительно раздражает отсутствие там фильтра для изменения имен файлов шаблонов :(
У меня есть обходной путь, хотя. Позвольте использовать
content.php
для сравнения.Я не использовал второй аргумент
get_template_part
функции, скорее, я передал суффикс для первого аргумента, чтобы избежать бесконечных обращений кcontent.php
файлу, если'content-'. $format
файла нет .источник
Ну, есть РЕШЕНИЕ :
но подумайте внимательно, в какой хук вы должны вставить это действие ... чтобы вручную определить местоположение, использовать, т.е.
locate_template('content-header.php', false);
источник
Если вы хотите извлечь файл с именем content-aside.php, вы вызываете функцию следующим образом:
Второй параметр - это имя файла после дефиса. Если ваш файл находится в подкаталоге (templates / content-aside.php):
Это то, что вы хотите сделать?
источник