web-dev-qa-db-ja.com

WP 子テーマにクラスをロードしようとしたときのカスタマイザ致命的エラー

私は多くのテーマを開発しましたが、私は子供のテーマを構築すること、そして特に子供のテーマにクラスを実装することを試みることは初めてです。だから私は見つけました...

子テーマにWPカスタマイザクラスをロードすることは可能ですか?私の場合、これが私の子供のテーマでやっていることです:

functions.php

// Setup the Child Theme URL
define('child_template_directory', dirname( get_bloginfo('stylesheet_url')) );
// Get the files in the inc folder
$files_to_require = array( 'theme-customizer', );
foreach( $files_to_require as $file ) {
 locate_template ( "inc/{$file}.php", true, true );
}

inc/theme-customizer.php

if ( ! function_exists( 'my_customizer_frontend' ) && ! class_exists( 'My_Customizer_Frontend' ) ) {
 function my_customizer_frontend() {
 load_template( child_template_directory . '/inc/customizer/class-my-customize-frontend.php' );
 new My_Customizer_Frontend(); //This is line 34
 }
 add_action( 'init', 'my_customizer_frontend' );
}

inc /カスタマイザ/ class-my-customizer-frontend.php

class My_Customizer_Frontend {
/* Do some stuff */
}

上記のコード例を使用すると、次のエラーを乗り越えることができません。

致命的なエラー:34行目の/var/www/html/mydomain.com/wp-content/themes/child-theme/inc/theme-customizer.phpにクラス 'My_Customizer_Frontend'が見つかりません

私は丸一日これを克服しようとしていて、そして今私の車輪を回転させているだけです。

私はすべてのコーデックスを見てきましたが、これはどこに書かれたものも対象外です。

何かアドバイスは大歓迎です。

宜しくお願いします、

1
Dennis

私はエラーメッセージが十分に明白であると思います:クラスは見つかりませんでした。最初にすべきことは、クラスが定義されているファイルをロードするために使用しているパスを確認することです。

これを実行してchild_template_directory定数の値を確認すると、末尾にスラッシュが付いていないことがわかります。

load_template( child_template_directory . 'inc/customizer/class-my-customize-frontend.php' );

する必要があります:

load_template( child_template_directory . '/inc/customizer/class-my-customize-frontend.php' );

とにかく、子テーマのdirectoyパスを取得するより良い方法があります。 get_stylesheet_directory() function

私はします:

load_template( get_stylesheet_directory() . '/inc/customizer/class-my-customize-frontend.php' );

または、少なくとも次のように定数を定義します。

define('child_template_directory', get_stylesheet_directory() );

PD:あなたの問題それはWPカスタマイザ致命的エラーではありません。

2
cybmeta