web-dev-qa-db-ja.com

子供のテーマでのオートロード

私は私の親テーマから私の子テーマにvendor/autoload.phpをオートロードしようとしています。

私が試したことがあるが役に立つにはならないもの:

function beast_theme_setup() {
  $var1 = get_theme_root_uri() . '/beast/vendor/autoload.php';
  $var2 = get_theme_root_uri() . '/beast/functions.php';
  $var = locate_template( array( $var1, $var2), true, false );
  var_dump($var);
}

add_action( 'after_setup_theme', 'beast_theme_setup', 11 );

そして

include get_theme_root_uri() . '/beast/vendor/autoload.php';

これに関するどんな助けでも素晴らしいでしょう。

ジェイクありがとう。

5
Henshall

そのため、留意すべきことが1つまたは2つあります。

  • 仕入先フォルダは1つだけです
  • あなたのプロジェクトのルートにある、主要なcomposer.jsonがあるはずです。
  • あなたは常に現在のディレクトリでオートローダをチェックしてロードします、あなた自身が依存関係にあるかもしれないしそうでないかもしれないのでそれがあるかどうかの保証はありません

しかし重要なことに、タスクを単純化するために知っておく必要があるWPテーマに関する詳細情報があります。

まず、get_theme_rootは必要ではなく、代わりにget_template_directory()を使うことができます、そしてそれはあなたに親テーマディレクトリを与えるので、親テーマ名をハードコーディングすることはありません。

これはあなたのコードをこれに単純化するはずです:

if ( file_exists( get_template_directory() . '/vendor/autoload.php' ) ) {
    require get_template_directory() . '/vendor/autoload.php';
}

しかし、これでも必要ではないので、2番目の情報になります。

WordPressでは、子テーマfunctions.phpがロードされ、その直後に親テーマfunctions.phpがロードされます。

したがって、親テーマがオートローダをロードし、すべてのコードが本来の動作で実行されるようにする必要があります(オートローダ自体を除く)。こうすれば、親テーマのオートローダをまったくロードする必要がなくなります。

7
Tom J Nowell