Intereting Posts
Дешифровать файл стиля CSS из WP footer Функция поиска jQuery не работает в WordPress, но выполняется локально (скрипка) Загрузка сообщений вне wordpress Как показать select_advanced контент вместо ID? Почему я получаю «вызов неопределенной функции curl_init ()», когда я пытаюсь использовать плагин «Общительный»? Как я могу автоматически вставлять содержимое страницы в качестве заголовка? Заменить css с использованием отрицательных условных тегов Создавайте общие действия для администратора и пользователей с помощью плагины bolierplate Как добавить пользовательский элемент управления на страницу? Почему я не могу исключить личные сообщения из этого запроса? Постоянная ссылка Настройки: необязательные настройки не применяются к редактору Поиск в одном настраиваемом поле? Есть ли способ открыть дополнительные поля для функции «Массовое действие»> «Редактировать»? Фильтр 'post_type_link' не работает $ wpdb variable throw this error Вызов функции-члена get_results () для не-объекта в

Загружать родительские файлы тем перед дочерней темой functions.php

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

Я попытаюсь показать пример:

parent-theme – file.php:

require_once get_template_directory().'/classes/Core.php'; require_once get_template_directory().'/classes/Core_View.php'; $CoreView = new Core_View(); $CoreView->init(); 

child-theme – functions.php:

 require_once get_template_directory().'/classes/ContentSidebarView.php'; $ContentSidebarView = new ContentSidebarView(); $ContentSidebarView->init(); 

Файл класса ContentSidebarView:

 Class ContentSidebarView extends Core_View{ public function init(){ // Do Something } } 

В настоящее время я получаю сообщение об ошибке, что класс Core_View не найден, когда я использую дочернюю тему. Это не тот случай, если я просто использую родительскую тему.

Что мне нравится: я хотел бы потребовать только шаблон в дочерней теме и инициировать его. Это означает, что Core_View придется уже загружать.

Я также открыт для предложений о том, как инициировать шаблон. Может быть, было бы лучше в файле индекса детской темы?

Solutions Collecting From Web of "Загружать родительские файлы тем перед дочерней темой functions.php"

Файл functions.php выполняется в plugins_loaded , а functions.php Child Theme functions.php выполняется перед родительской темой functions.php . Это означает, что для загрузки функциональных plugins_loaded теме после выполнения functions.php Parent Theme functions.php вам просто нужно подключить вызовы include() после plugins_loaded .

Обычно безопасное действие для таких целей – after_setup_theme :

 function wpse130681_load_dependent_functional_files() { require_once get_template_directory().'/classes/ContentSidebarView.php'; $ContentSidebarView = new ContentSidebarView(); $ContentSidebarView->init(); } add_action( 'after_setup_theme', 'wpse130681_load_dependent_functional_files' ); 

Это сказало: если вы столкнулись с такими проблемами, как этот, вы, вероятно, в первую очередь делаете что-то неправильно . Просто догадываясь из вашего примера кода:

  1. Возьмите экземпляр класса в соответствующий крючок, например init
  2. Сделайте ваши классы фреймворков расширяемыми через фильтры и расширьте их в своей дочерней теме с помощью этих фильтров.

Предоставьте настраиваемое действие в родительской теме:

 do_action( get_template() . '_loaded', $api_class_instance ); 

В своей дочерней теме запустите первый код этого хоста, а не раньше:

 add_action( get_template() . '_loaded', function( $api_class_instance ) { $api_class_instance->some_public_method(); });