WordPress に関しては、2 つの主な機能があります: get_template_directory()
, get_stylesheet_directory()
, これらの最初のものはテーマ フォルダーを検索し、もう 1 つは子テーマ ディレクトリを検索します。
これらを組み合わせると、以下で構成されるオートローダーを作成できます。
public function get_instance(){
if(null == self::$_instance){
self::$_instance = new self();
}
self::$_directories = array(
get_template_directory(),
get_stylesheet_directory(),
);
return self::$_instance;
}
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');
}
}
}
これらの関数は明らかにインスタンス化されるクラスに属します。ここで行っていたのは、「/」を「_」に置き換え、末尾に .php を追加して、Folder_SubFolder_ClassName の命名基準を使用するクラスを探すことです。それほど難しくありません。
毎回動作します。子テーマ クラスは親テーマ クラスをロードでき、親テーマ クラスは心配することなく相互に呼び出すことができます。require_once()
ミックスに何かを投入してみましょう。テーマがカスタム/パッケージを使用していて、そこにクラスがあると仮定しましょう。明らかな答えは、を次のように変更するget_instance()
ことです。
public function get_instance(){
if(null == self::$_instance){
self::$_instance = new self();
}
self::$_directories = array(
get_template_directory(),
get_stylesheet_directory(),
get_template_directory() . '/custom/packages/'
);
return self::$_instance;
}
この方法では、次のようなクラスをPackageName_Folder_SubFolder_ClassName{}
ロードする必要があります。これは内部に存在するためでありcustom/packages/PackageName/Folder/SubFolder/ClassName.php
、オートローダーにこれらの 3 つの場所でクラスを探すように指示しました。
それで問題は何ですか?
PackageName_Folder_SubFolder_ClassName
存在しない、または見つからないというエラーが表示されます。
なんで?私は何をしている、または間違っていると思いますか?