Intereting Posts
Максимальное количество сообщений в сети (многосетевое соединение WP) Подключение к walker_nav_menu_start_el для вставки списка подстраниц Хотите изменить плагин – Приятно – Могу ли я сделать это твитом пользовательское поле вместо заголовка сообщения? Как разрешить выходить пользователям загружать медиа? Force Cron запускается только на одном сервере Проверьте, что находится в URI (пост, архив и т. Д.) Что делает query_var в register_taxonomy Захват для редактирования изображений Меню Nav из плагина в тему Если WordPress управляет только определенными страницами с .htaccess? Возможно ли использовать query_posts, используя post__in, а затем прокручивать их в упорядоченных запросах? publish_post называется слишком ранним Woocommerce показывает изображения размытыми на странице описания Лимит выполнения и ошибки ограничения памяти даже я изменил на 1024M и 600 (cache.php, load.php)? Как создать пользовательские URL таксономии без названия таксономии?

Разве я не понимаю плагинов?

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

class AisisCore_Loader_AutoLoader{ protected static $_instance; protected static $_directories; public function get_instance(){ if(null == self::$_instance){ self::$_instance = new self(); } self::$_directories = array( get_template_directory(), get_stylesheet_directory(), plugin_dir_path(__FILE__), ); return self::$_instance; } public function reset_instance(){ self::$_instance = null; } public function register_auto_loader(){ spl_autoload_register(array($this, 'load_class')); } public function load_class($class){ $path = str_replace('_', '/', $class); foreach(self::$_directories as $directories){ if(file_exists($directories . '/' . $path . '.php')){ require_once($directories . '/' . $path . '.php'); } } } } 

Но я не думаю, что понимаю, как plugin_dir_path функция plugin_dir_path . проблема в том, что, как только этот класс будет создан, ни один класс не может быть загружен в каталог плагина. это /plugin/myplugin/ Как бы то ни было, если у меня есть тема с использованием среды, которую я разрабатываю, и тема активирована, и я создаю экземпляр этого класса в основном файле php плагина через:

 //require_once(plugin_dir_path(__FILE__) . 'AisisCore/Loader/AutoLoader.php'); require_once(get_template_directory() . '/AisisCore/Loader/AutoLoader.php'); // Setup the autoloader. $auto_loader = AisisCore_Loader_AutoLoader::get_instance(); $auto_loader->register_auto_loader(); $obj = new AisisCore_Http_Http(); 

Затем все работает, он видит класс AisisCore_Http_http и т. Д., Но если я это сделаю:

 require_once(plugin_dir_path(__FILE__) . 'AisisCore/Loader/AutoLoader.php'); //require_once(get_template_directory() . '/AisisCore/Loader/AutoLoader.php'); // Setup the autoloader. $auto_loader = AisisCore_Loader_AutoLoader::get_instance(); $auto_loader->register_auto_loader(); $obj = new AisisCore_Http_Http(); 

он волнуется и не может найти класс.

Идеи?

Solutions Collecting From Web of "Разве я не понимаю плагинов?"

когда столкнулся с чем-то похожим, я нашел решение, которое работает, если ваша структура находится внутри плагина (так кажется).

Если ваш основной файл плагина (тот, который распознан WordPress как файл плагина), например, /plugin/Aisis/ вы можете поместить этот путь в константу, например.

 define('AISISPATH', dirname(__FILE__)); require ( trailingslashit (AISISPATH) . 'AisisCore/Loader/AutoLoader.php' ); if ( ! class_exists('AisisCore_Loader_AutoLoader') ) die('Something strange happened.'); AisisCore_Loader_AutoLoader::get_instance(); 

В вашем get_instance() класса AisisCore_Loader_AutoLoader :

  self::$_directories = array( get_template_directory(), get_stylesheet_directory(), trailingslashit( AISISPATH ) ); 

Таким образом, AisisCore_Loader_AutoLoader::$_directories[2] будут {wp_path_here}/plugin/Aisis поэтому, когда вы вызываете $obj = new AisisCore_Http_Http(); ваш метод автозагрузчика будет искать в {wp_path_here}/plugin/Aisis/AisisCore/Http/Http.php .

Все работает, конечно, если плагин активирован с панели инструментов WP.

Если вы следуете этому процессу, неплохо начать метод get_instance() с: if ( ! defined('AISISPATH ') ) die('Framework not initilized.');

Вероятно, ваша логика не работает, потому что plugin_dir_path($file) является просто оболочкой для trailingslashit( dirname( $file ) ) (см. Codex ), поэтому, если вы используете эту функцию, передавая __FILE__ качестве параметра, она вернет папку, в которой файл, вызывающий функцию (в вашем случае «AisisCore / Loader /»), а не ваш корневой каталог.

Надеюсь, это вам поможет.