回答:
子テーマは、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を使用して、スクリプトをエコー出力する関数を削除し、独自のスクリプトをキューに登録します。
スクリプトがテンプレートファイルにハードコーディングされている場合、スクリプトタグを使用せずに、子テーマのテンプレートファイルを置き換えるだけで済みます。
彼らは利用wp_enqueue_script呼び出しを使用した場合get_stylesheet_directory_uriを、あなたは何もする必要はありません。これは起きていないので、テーマ作成者が何をしたかを見て回るだけです。
wp_enqueue_scripts
は、フロントエンドのスクリプトのみをキューに入れるために使用できます。更新しました。古くなったものがあれば、お気軽に編集してください。
add_action( 'wp_enqueue_scripts', 'wpse26822_script_fix', 100 );
wp_deregister_script('parent-script-handle');
、親スクリプトを完全に削除するためにも使用する必要があります。実際、それなしでは機能しませんでした。WP 4.6.1
場合によっては、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_enqueue_script
は優先度パラメーターはありません。これは、クエリ文字列としてパスの末尾に連結されるバージョン番号のみです。このパラメーターは、キャッシュに関係なく正しいバージョンがクライアントに送信されることを保証するために使用されます[...]
独自のバージョンを登録する前にwp_deregister_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 );