Как переопределить get_template_directory() в дочерней теме?

27 июн. 2015 г., 09:03:26
Просмотры: 41.1K
Голосов: 13

Возможно ли заменить get_template_directory() в файле functions.php моей дочерней темы?

Я хочу внести изменения в файл:

/**
* Загрузка файла с пользовательскими типами записей.
*/
require get_template_directory() . '/inc/post-types.php';

Очевидно, я предпочел бы, чтобы моя работа не перезаписывалась при обновлении темы, поэтому могу ли я отменить регистрацию файла родительской темы, а затем повторно зарегистрировать файл из дочерней темы в functions.php дочерней темы?

4
Комментарии

Есть ли действие в файле post-types.php? Если да, возможно, можно удалить это действие или, может быть, хук в этом файле?

czerspalace czerspalace
27 июн. 2015 г. 10:12:37

Регистрация типов записей имеет действие, позволяющее их модифицировать. Возможно, если вы объясните, что именно хотите изменить в этом файле, вам не понадобится полностью заменять его.

Milo Milo
27 июн. 2015 г. 19:21:20

Мне нужно изменить многое. В основном названия и поддерживаемые функции различных пользовательских типов записей.

Heather Heather
28 июн. 2015 г. 00:03:57

Вы можете использовать get_template_directory_uri() в дочерней теме.

Pardeep Pardeep
4 окт. 2019 г. 13:43:19
Все ответы на вопрос 2
1
30

Поздний ответ, но в WordPress 4.7 были представлены две новые функции для решения этого вопроса.

get_theme_file_path() (для абсолютных путей к файлам) и get_theme_file_uri() (для URL) работают так же, как get_template_part(), то есть они сначала будут искать файл в дочерней теме, а затем, если не найдут, перейдут к родительской теме.

В вашем примере код можно переписать для версии 4.7 следующим образом:

/**
* Загрузка файла пользовательских типов записей.
*/
require get_theme_file_path( 'inc/post-types.php' );

Подробнее здесь: https://make.wordpress.org/core/2016/09/09/new-functions-hooks-and-behaviour-for-theme-developers-in-wordpress-4-7/

9 дек. 2016 г. 21:32:03
Комментарии

Я не понимаю, как это решает проблему, когда создатель темы добавил require( get_template_directory() . '/includes/somefile.php' ); в functions.php родительской темы. Как мне заменить somefile.php, не изменяя код родительской темы? Я понимаю, что разработчик родительской темы мог бы использовать более подходящую функцию, но он этого не сделал.

Fanky Fanky
29 окт. 2021 г. 17:15:42
1
15

В дочерней теме следует использовать get_stylesheet_directory_uri() вместо get_template_directory().

Из WordPress Codex:

get_template_directory_uri()

Если используется дочерняя тема, будет возвращён URI родительской темы. Функцию get_template_directory_uri() следует использовать для ресурсов, которые не предназначены для включения или переопределения в дочерней теме. Используйте get_stylesheet_directory_uri() для ресурсов, которые должны быть включены или переопределены в дочерней теме.

get_stylesheet_directory_uri()

Если используется дочерняя тема, эта функция вернёт URI директории дочерней темы. Используйте get_template_directory_uri(), чтобы избежать переопределения дочерней темой.

27 июн. 2015 г. 09:57:31
Комментарии

Да, но поскольку get_template_directory() находится в родительской теме, могу ли я что-то сделать из дочерней темы, чтобы изменить это?

Heather Heather
27 июн. 2015 г. 18:21:00