Почему мой автозагрузчик загружает каждый класс в моей установке wp? - PullRequest
0 голосов
/ 11 октября 2019

Я работал над плагином WordPress, и мне пришлось расширить класс в другом файле, чего я раньше не делал. Так что это заставило меня использовать автозагрузчик. Чтобы дать вам некоторое представление о структуре моей папки.

Каталог моих плагинов

plugins / knp-vendor-portal /

Структура моей папки.

/ knp-classes

/ css

/ js

knp-vendor-portal.php

В моем основном файле плагинаЯ использую следующее, чтобы загрузить свои классы, однако, когда я смотрю в монитор запросов, я получаю массу ошибок. По сообщениям об ошибках, функция include_once пытается загрузить еще сотни классов из всех других плагинов. Так почему же он не загружает классы из моего плагина, только если имя DIR указывает на мой каталог классов?

Вот код, который я использую в своем основном файле плагина.

function knp_load_first(){

    //Auto load all the class files
    spl_autoload_register('knpv_autoloader');

   //Some other code calling some methods


}
add_action('plugins_loaded', 'knp_load_first');

function knpv_autoloader($classname){

    include_once plugin_dir_path( __FILE__ ).'knp-classes/'.$classname.'.php';

}

1 Ответ

1 голос
/ 11 октября 2019

Автозагрузчик работает для каждого класса, который еще не загружен при попытке загрузки. Вам нужно проверить, что $classname в функции knpv_autoloader соответствует вашему пространству имен или соглашению об именах, прежде чем пытаться загрузить его из каталога knp-classes. Например ...

function knpv_autoloader($classname)
{
    if (strpos($classname, 'knpv_') !== false) {
        include_once plugin_dir_path( __FILE__ ).'knp-classes/'.$classname.'.php';
    }
}

Это предполагает, что ваши классы имеют префикс knpv_, если вы используете пространство имен, вы можете проверить это тоже что-то вроде Knpv\\ и т.д ...

...