Intereting Posts
Как считать мультимедийные вложения? Не удается получить доступ к подстраницам подкаталогов Создание галереи выделенных изображений из пользовательского типа сообщения Когда использовать пользовательские таблицы таблиц или add_option? Запросить сообщения с более чем 20 комментариями Ограничить количество страниц в разбивке на страницы Использование wp-cli для обновления сетей WP / Multisite с 3.5.1 до 3.8 Фреймворк PHP для использования с WordPress Как настраивать Редактировать Заголовок сообщения и Permalink Slug? Вход в боковую панель: как я могу получить имя пользователя после «Добро пожаловать»? wp_dropdown_categories () скрипты, работающие беспорядочно на боковой панели Тип персонализированного сообщения типа Pretty Шрифт Google не отображается в теме Вложение страницы Постоянная ссылка Структура на основе заказа меню? Как искать массив, хранящийся в настраиваемом поле, используя WP_Query?

наследственность детской темы и автозагрузка php

Я написал этот метод в родительском им, который будет автоматически загружать класс на основе имени класса, поэтому, если имя класса: SomeFolder_Folder_Folder_Class.php, то оно преобразует его в: SomeFolder / Folder / Folder / Class.php и загрузит его, если это существует:

public function load_class($class){ $path = str_replace('_', '/', $class); if(file_exists(get_template_directory() . '/' . $path . '.php')){ require_once(get_template_directory() . '/' . $path . '.php'); } } 

Это работает в сочетании с spl_autoload_register() для достижения этой функции «автоматической загрузки». Поэтому вместо того, чтобы иметь кучу require_once, вы просто выполните: new SomeFolder_Folder_Folder_Class() и автоматически загрузите его.

Это отлично работает в родительском им и даже в дочерней теме при загрузке классов из родительской темы. Как бы то ни было, при попытке загрузить классы из дочерней темы – она ​​терпит неудачу и заявляет, что не может найти указанный класс.

Поэтому я думал, что давайте сделаем:

 public function load_class($class){ $path = str_replace('_', '/', $class); if(is_child_theme()){ if(file_exists(get_template_directory() . '/' . $path . '.php')){ require_once(get_template_directory() . '/' . $path . '.php'); } }else{ if(file_exists(get_template_directory() . '/' . $path . '.php')){ require_once(get_template_directory() . '/' . $path . '.php'); } } } 

Но тогда родительские классы классов начинают волноваться из-за стона, которые не могут быть найдены, поэтому я добавил новый уровень сложности:

 public function load_class($class){ $path = str_replace('_', '/', $class); if(is_child_theme()){ if(file_exists(get_stylesheet_directory() . '/' . $path . '.php')){ require_once(get_stylesheet_directory() . '/' . $path . '.php'); }else{ if(file_exists(get_template_directory() . '/' . $path . '.php')){ require_once(get_template_directory() . '/' . $path . '.php'); } } }else{ if(file_exists(get_template_directory() . '/' . $path . '.php')){ require_once(get_template_directory() . '/' . $path . '.php'); } } } 

Но потом вернулись на круги своя, где вы не можете найти класс детской темы ….

Итак – с этим сказал: «Что делать? Как заставить автозагрузчик работать как в родительской теме, так и в дочерней теме?

Добавлен уровень сложности? классы дочерних тем могут расширять и внедрять родительские классы тем.

Мысли?

Solutions Collecting From Web of "наследственность детской темы и автозагрузка php"