0

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存在しない、または見つからないというエラーが表示されます。

なんで?私は何をしている、または間違っていると思いますか?

4

1 に答える 1