为什么我的自动加载器在我的 wp 安装中每隔 class 加载一次?

Why is my autoloader loading every class in my wp install?

我一直在开发一个 wordpress 插件,我不得不在另一个文件中扩展 class,这是我以前从未做过的事情。所以这让我开始使用自动加载器。让您了解我的文件夹结构。

我的插件目录

plugins/knp-vendor-portal/

我的文件夹结构。

/knp-classes

/css

/js

knp-供应商-portal.php

在我的主插件文件中,我使用以下内容来加载我的 classes,但是当我查看查询监视器时,我遇到了大量错误。错误表明 include_once 函数似乎试图从所有其他插件加载数百个 classes。那么,如果 DIR 名称指向我的 classes 目录,为什么它不只从我的插件加载 classes。

这是我在主插件文件中使用的代码。

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';

}

自动加载器会在每个 class 尝试加载时运行,但尚未加载。在尝试从 knp-classes 目录加载它之前,您需要检查 knpv_autoloader 函数中的 $classname 是否与您的命名空间或命名约定匹配。例如...

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

这假定您的 classes 具有前缀 knpv_,如果您使用的是命名空间,您也可以检查它,例如 Knpv\ 等...