我在一个父类中编写了这个方法,它将根据类名自动加载一个类,因此如果类名是:SomeFolder\\u Folder\\u Folder\\u 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\\u:
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\');
}
}
}
但是,我们又回到了原点,在那里你找不到儿童主题课。。。。
那么,既然如此,该怎么办呢?如何让自动加载器同时在父主题和子主题中工作?
增加了复杂性?子主题类可以扩展和实现父主题类。
有什么想法?