У меня проблема с тем, что мне нужно загрузить functions.php
файл моей родительской темы до загрузки файла моей дочерней темы functions.php
. Это необходимо для процедуры установки и инициализации. Я посмотрел на хуки внутри /wp_core_root/wp-settings.php (по имени:) do_action('setup_theme');
.
Проблема в том, что я не знаю, как туда попасть, потому что первый файл, который я получаю, это дочерняя тема functions.php
, так что не add_action( 'setup_theme', 'my_init_function' );
будет работать.
Изменить:
а) Я знаю, что плагины загружаются раньше, чем тема и, следовательно, могут получить доступ даже к первоначальному запросу, но я не хочу полагаться на плагин.
б) Вот код (сокращенный) из файла wp-settings.php
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
Я хочу избежать двух вещей: сначала много объяснений для пользователей. Во-вторых, вероятность того, что кто-нибудь что-нибудь сломает, если перережет веревку, случайно удалив родительскую процедуру инициализации. Люди должны просто играть внутри functions.php, не рискуя что-то сломать, не зная об этом.
Другими словами: как сохранить мой файл functions.php дочерних тем в чистоте, но завершить ли загрузку родительских тем?
Есть идеи? Большое спасибо!
functions.php
. Взгляните наwp-settings.php
файл "molto loko" в ядре (строка: 275-279 @wp 3.1 rc) ... выглядит так:if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );
я не вижу шансов ... И я не хочу использовать плагин для загрузки моей темы.include(/path/to/parent/themes/functions.php)
в начало своих дочерних тем functions.php, то все, что там, загружается раньше. Не?Ответы:
Джастин Тэдлок недавно написал отличный пост о создании лучшего файла functions.php, в
котором (если я правильно помню) он занимается именно этой проблемой.
К сожалению, его сайт в данный момент не работает, поэтому я пока полагаюсь на свою память.
Вы на правильном пути с
after_setup_theme
крюком.Смотрите пример ниже.
functions.php
файлов.Немного кода стоит тысячи слов - ваша родительская тема
function.php
должна выглядеть так:источник
after_setup_theme
слишком поздно, потому что файлы functions.php уже были загружены.Во-первых, вы не можете. Functions.php дочерней темы всегда загружается первым, точка.
Во-вторых, темы не могут подключиться к setup_theme. Плагины могут, но первое, на что может зацепить тема - это after_setup_theme.
Если ваш родительский элемент спроектирован правильно, то дочерний элемент способен переопределять функции и содержимое родительского элемента, но только при первой загрузке.
В общем, если вы думаете, что сначала вам нужно загрузить файл функций родителя, то вы, вероятно, делаете это как-то неправильно. Вы должны объяснить большую проблему.
источник
after_setup_theme
ловушку? Просто чтобы не «спамить» крючок, или потому что он более «предприимчивый» или «крутой»? Я имею в виду: является ли идея «наилучшей практики» за параллельными хуками, характерными для темы, «оставить хуки для плагинов»? (Вот как я справляюсь с этим в настоящее время.)Итак, вы пытаетесь выполнить код из дочернего functions.php, но после загрузки родительской темы. Просто, просто используйте настраиваемое действие:
В конце
parent/functions.php
:В
child/functions.php
:Все родительские темы, достойные их внимания, делают это так. Более того, у них есть несколько других действий и фильтров, разбросанных по дочерней теме.
источник
Почему бы вам не включить
functions.php
файл родительской темы в файл дочерней темыfunctions.php
, например так:В
functions.php
файле дочерней темы :Таким образом,
functions.php
файл родительской темы не изменяется (иногда это важно).источник
У меня раньше была похожая проблема, и я исправил ее, создав дополнительный пустой «child-functions.php» в parent и включив в «functions.php» (тоже parent) сразу после файлов / функций, которые я хочу использовать в child, затем в дочерней теме я создаю файл «child-functions.php», и там я могу начать имитировать запуск дочерних функций. php после того, как parent не является элегантным решением, но сделал свою работу.
источник