Как переопределить файлы JavaScript в дочерней теме?

Я загружаю некоторые файлы JavaScript в родительскую тему. Путь в родительской теме:

  scripts> custom.js
 

В дочерней теме я создаю один и тот же путь ( scripts> custom.js ) и меняю некоторые из jQuery внутри файла custom.js .

Проблема заключается в том, что изменения не применяются. Это неправильный способ внести изменения в эти файлы в дочернюю тему?

34 голоса | спросил Chris Molitor 25 AM00000020000002431 2011, 02:14:24

3 ответа


41

Детские темы только переопределяют файлы php (например, header.php), которые включаются в функции get_template_part или get_header и т. д.

Правильный способ добавления скриптов в WordPress - wp_enqueue_script . Если ваша родительская тема использует это, вы можете переопределить JS-файлы, используя wp_dequeue_script и запустив свой собственный.

Так же ...

  & л;? PHP
//поздно задерживаемся, чтобы убедиться, что регистрация родительской темы
//уволен, поэтому вы можете его отменить. В противном случае родитель будет просто
//в любом случае ставим его скрипт.
add_action ('wp_enqueue_scripts', 'wpse26822_script_fix', 100);
функция 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 , вам не нужно ничего делать. Так как этого не происходит, вам просто нужно сориться и посмотреть, что сделал автор темы.

ответил chrisguitarguy 25 AM00000020000003931 2011, 02:27:39
1

В некоторых случаях важно определить приоритеты как функций add_action, так и функции wp_enqueue_script следующим образом:

  add_action ('wp_enqueue_scripts', 'wpse26822_script_fix', 20120207);
функция wpse26822_script_fix ()
{
    wp_dequeue_script ( 'витрину-навигации');
    wp_enqueue_script ('my_storefront-navigation', get_stylesheet_directory_uri (). '/js /navigation.min.js', array ('jquery'), 20151110, true);
}
 

В этом случае wp_enqueue_scripts вызывается родителем с приоритетом 20120206 (дата), и поэтому это действие добавляется с приоритетом, чуть более большим, так что он будет немедленно удален. Затем оператор enqueue, который следует за этим, фактически имеет приоритет после этого, чтобы обеспечить его загрузку после того, как старый был удален. Истина в этом случае также важна, потому что она указывает, что она должна быть заключена в нижнем колонтитуле, где исходный скрипт был сначала выставлен в очередь.

Кроме того, я не могу полностью объяснить это полностью, но я замечаю, что если вы будете осторожны с удалением исходного скрипта сразу после его размещения в очереди, кажется, вы можете эффективно предотвратить его загрузку в первую очередь.

ответил damiankaelgreen 11 32015vEurope/Moscow11bEurope/MoscowWed, 11 Nov 2015 04:24:10 +0300 2015, 04:24:10
1

вызовите wp_deregister_script перед тем, как зарегистрировать свою собственную версию

ответил Mohamed Abo Badawy 25 SunEurope/Moscow2016-12-25T18:17:08+03:00Europe/Moscow12bEurope/MoscowSun, 25 Dec 2016 18:17:08 +0300 2016, 18:17:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132