Как проверить файлы дочерней темы, сначала используя include, прежде чем перейти к родительской теме? - PullRequest
0 голосов
/ 15 сентября 2018

Я создаю дочернюю тему WordPress на основе существующей родительской темы, и я хотел бы, чтобы любой файл с тем же именем, который я помещал в каталог своей дочерней темы, имел приоритет над файлом в каталоге родительской темы.Я думал, что именно так родительский / дочерний процесс был настроен в WP, но я столкнулся с проблемой.

Согласно Кодексу WordPress для дочерних тем , он говорит:

Файлы шаблонов
Если вы хотите изменить не только таблицу стилей, ваша дочерняя тема может переопределить любой файл в родительской теме: просто включите файл с тем же именем в дочернюю темукаталог, и он переопределит эквивалентный файл в каталоге родительской темы при загрузке вашего сайта.

В одном из моих файлов (header.php) есть включение, которое выглядит так:

include get_parent_theme_file_path("folder/file.php")

Несмотря на то, что у меня есть версия файла file.php с дублированным именем, но изменена в моей дочерней теме, она все еще использует версию в моей родительской теме.Согласно тому же кодексу, их рекомендация для нацеливания на файл дочерней темы, в частности, заключается в использовании get_stylesheet_directory (), так что это будет выглядеть так:) "означает игнорировать отношения родитель / потомок и просто получить версию родительской темы, поэтому, не заменяя ее функцией, которая явно получает файл в моей дочерней теме (т. е. get_stylesheet_directory), есть ли способ, которым я могу иметькакая-то универсальная функция get_path (), которая сначала проверяет дочерний объект, если он не существует, получить родительскую версию?

Кстати, я прочитал эти вопросы и ответы на "get_parent_theme_file_path vs.get_template_directory ", но их решение состояло в том, чтобы использовать фильтры parent_theme_file, но это не было динамическим, и потребовало бы от меня написать функцию фильтра для каждого дочернего файла, который я хочу использовать.

Спасибо за вашеПомогите.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2018

Кто-то на wordpress.stackexchange указал на использование locate_template, которое возвращает имя существующего файла шаблона с наивысшим приоритетом.

Выполняет поиск в STYLESHEETPATH ​​перед TEMPLATEPATH и wp-includes / theme-compat, чтобы темы, которые наследуются от родительской темы, могли просто перегрузить один файл.

0 голосов
/ 15 сентября 2018

Вы пробовали что-то вроде этого:

add_filter( 'parent_theme_file_path', function( $path, $file ) {
    return get_stylesheet_directory() . '/' . $file;
}, 10, 2 );

Это должно переопределить путь родительской темы без необходимости писать функцию для каждого файла.

Если вы хотите убедиться, что get_parent_theme_file_path() по-прежнему работает для файлов родительской темы, которые не переопределяются в вашей дочерней теме, вы можете сделать простую проверку:

add_filter( 'parent_theme_file_path', function( $path, $file ) {
    if ( !file_exists( get_stylesheet_directory() . '/' . $file ) ) {
        return $path;
    }
    return get_stylesheet_directory() . '/' . $file;
}, 10, 2 );
...