WordPress : héritage du thème enfant et chargement automatique php
J’ai écrit cette méthode dans un parent eux qui chargera automatiquement une classe basée sur le nom de la classe, donc si le nom de la classe est : SomeFolder_Folder_Folder_Class.php alors il le convertira en : SomeFolder/Folder/Folder/Class.php et le chargera si ça existe:
public function load_class($class){
$path = str_replace('_', '/', $class);
if(file_exists(get_template_directory() . '/' . $path . '.php')){
require_once(get_template_directory() . '/' . $path . '.php');
}
}
Cela fonctionne en conjonction avec spl_autoload_register()
pour réaliser cette fonctionnalité de « chargement automatique ». Ainsi, au lieu d’avoir un tas de require_once, vous faites simplement : new SomeFolder_Folder_Folder_Class()
et il le charge automatiquement.
Cela fonctionne très bien dans le parent, et même dans le thème enfant lors du chargement de classes à partir du thème parent. Cependant, lorsque vous essayez de charger des classes à partir du thème enfant, cela échoue et indique qu’il ne peut pas trouver ladite classe.
Alors j’ai pensé faisons:
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');
}
}
}
Mais ensuite, les classes thématiques parentales commencent à paniquer en gémissant qu’elles sont introuvables, alors j’ai ajouté un nouveau niveau de complexité :
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');
}
}
}
Mais ensuite, nous sommes revenus à la case départ où vous ne pouvez pas trouver la classe à thème enfant ….
Donc – cela dit, que faire ? Comment faire fonctionner le chargeur automatique à la fois dans le thème parent et dans le thème enfant ?
Niveau de complexité supplémentaire ? les classes de thème enfant peuvent étendre et implémenter des classes de thème parent.
Les pensées?
Solution n°1 trouvée
utiliser à la locate_template()
place.
public function load_class( $class )
{
$path = str_replace('_', '/', $class);
// returns a path when something was found
$located = locate_template( $path, TRUE );
return $located ? TRUE : FALSE;
}
Revenez toujours FALSE
dans un chargeur automatique si vous n’avez pas trouvé la classe.
0 commentaire