私はいくつかのJavaScriptファイルを親テーマにロードしています。親テーマのパスは次のとおりです。
scripts > custom.js
子テーマでは、同じパス(scripts > custom.js
)を作成し、custom.js
ファイル内のいくつかのjQueryを変更します。
問題は、変更が適用されていないことです。これは、子テーマのこれらのファイルに変更を加えるための間違った方法ですか?
子テーマは、get_template_partやget_headerなどの関数に含まれるphpファイル(header.phpなど)のみをオーバーライドします。
WordPressにスクリプトを追加する正しい方法は wp_enqueue_script を使うことです。あなたの親テーマがこれを使用している場合、 wp_dequeue_script を使用してあなた自身のものをエンキューすることによってJSファイルをオーバーライドすることができます。
そのようです...
<?php
// hook in late to make sure the parent theme's registration
// has fired so you can undo it. Otherwise the parent will simply
// enqueue its script anyway.
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
function wpse26822_script_fix()
{
wp_dequeue_script('parent_theme_script_handle');
wp_enqueue_script('child_theme_script_handle', get_stylesheet_directory_uri().'/scripts/yourjs.js', array('jquery'));
}
親テーマがwp_enqueue_scriptを使用していない場合は、おそらくそこにあるスクリプトをエコーアウトするためにwp_head(またはwp_footer)にフックします。そのため、 remove_action を使用してスクリプトをエコーアウトする関数を削除してから、独自のスクリプトをエンキューします。
スクリプトがテンプレートファイルにハードコードされている場合は、scriptタグを使用せずに、子テーマ内のそのテンプレートファイルを置き換えるだけで済みます。
彼らが get_stylesheet_directory_uri を利用するwp_enqueue_script呼び出しを使用した場合は、何もする必要はありません。これは起こっていないので、あなたはただ振り返ってテーマ作者が何をしたのかを見なければならないでしょう。
// enqueue your required script file
add_action('wp_enqueue_scripts', 'your_child_theme_js_file_override');
function your_child_theme_js_file_override(){
wp_enqueue_script( 'child_theme_script_handle', get_stylesheet_directory_uri() . '/assets/js/your-file.js', array('jquery' ) );
}
// dequeue your required script file
function your_child_theme_js_file_dequeue() {
wp_dequeue_script( 'parent_theme_script_handle' );
}
add_action( 'wp_print_scripts', 'your_child_theme_js_file_dequeue', 100 );
場合によっては、add_actionとwp_enqueue_scriptの両方の呼び出しを優先させることが重要です。
add_action('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
function wpse26822_script_fix()
{
wp_dequeue_script('storefront-navigation');
wp_enqueue_script('my_storefront-navigation', get_stylesheet_directory_uri().'/js/navigation.min.js', array('jquery'),20151110,true);
}
この場合、wp_enqueue_scriptsは、20120206(日付)の優先順位で親によって呼び出されたため、このアクションはすぐにデキューされるように、わずかに高い優先順位で追加されます。その後は、その後に続くエンキュー文が実際に優先されて、古いエンキューがデキューされた後にロードされます。この場合は、それがフッターにエンキューされることを指定しているので、これも重要です。つまり、親スクリプトが最初にエンキューされた場所です。
また、完全に説明することはできませんが、最初のスクリプトをエンキューした直後にデキューすることに注意している場合は、最初のスクリプトが実際にロードされないようにすることができます。
自分のバージョンを登録する前に wp_deregister_script を呼び出してください。