В файле functions.php моей темы я вызываю add_action, чтобы получить меру контроля над тем, куда загружается jquery (в нижнем колонтитуле вместе с другими скриптами моей темы).
Проблема, с которой я столкнулся, заключается в том, что когда я использую add_action ('wp_enqueue_scripts'), он запускается, только если плагины не загружены. Однако метод add_action ('init') работает во всех случаях.
Я не могу вспомнить почему, но я считаю, что add_action ('wp_enqueue_scripts') предпочтительнее в этом случае. Если это правда, как я могу заставить его работать во всех случаях?
В functions.php
//if(!is_admin()){add_action('init', 'my_theme_init');} //THIS WORKS ALL THE TIME
//add_action('wp_enqueue_scripts', 'my_theme_init'); //THIS ONLY WORKS WHEN NO PLUGINS PRESENT
if(!is_admin())
{
require_once(TEMPLATEPATH . '/functions_public.php');
}
В functions_public.php
function my_theme_init()
{
/* PREVENT DUPLICATE COPIES OF JQUERY FROM PLUGINS
**************************************************/
wp_deregister_script('jquery');
/* LOAD THE LOCAL WORDPRESS COPY OF JQUERY AND THEME CUSTOM SCRIPTS IN THE FOOTER
***********************************************/
wp_register_script('jquery', get_bloginfo('template_directory').'/scripts.mythemescripts.js',false,false,true);
wp_enqueue_script('jquery');
}
Второй метод, использующий add_action ('wp_enqueue_scripts'), по-видимому, не выполняется в условиях, когда присутствует плагин, который записывает зависимости скрипта в тему.
источник
Ответы:
Многие разработчики плагинов не делают все правильно. Правый путь зацепить , чтобы ,
wp_enqueue_scripts
как вы пытаетесь сделать.Тем не менее, вот порядок выполнения хуков в типичном запросе:
Дело в том, что нескольким разработчикам изначально предлагалось
init
цепляться за постановку своих скриптов. Еще до того, как у нас появилсяwp_enqueue_script
хук, это был «правильный» способ сделать что-то, и учебные пособия, увековечивающие эту практику, все еще ходят по Интернету, развращая хороших разработчиков.Я рекомендую разделить вашу функцию на две части. Сделайте ваш
wp_deregister_script
/wp_register_script
наinit
хуке и используйтеwp_enqueue_scripts
хук, когда вы на самом деле ставите jQuery в очередь.Это позволит вам «делать все правильно» для постановки в очередь ваших сценариев и поможет защитить вас от сотен разработчиков, которые все еще «делают это неправильно» путем замены jQuery на вашу сцепленную версию, прежде чем они добавят ее в очередь. ,
Вы также захотите добавить свой
init
хук с высоким приоритетом:источник
priority
добавлении действий. Все зависит от того, как вы оцениваете приоритет. Если вы хотите, чтобы ваш выполнялся «первым», то чем меньше число, тем лучше - более высокий приоритет в порядке очереди выполнения. Но если вы хотите, чтобы эффект вашей функции имел приоритет над другими, вы захотите, чтобы он выполнялся позже - так что более высокий приоритет - «эффект». И в этом случае это, вероятно, большее число, которое вы хотели бы. Несмотря на то, что выгрузка RTM-версии jquery не имеет смысла, как предполагает предыдущий комментатор.Здесь есть несколько вопросов, которые взаимосвязаны.
wp_enqueue_scripts
wp_enqueue_script()
, установите для$footer
параметра значениеtrue
add_action( $hook, $callback )
звонки ни в коем случае не должны быть обернуты; пусть они выполняются прямо изfunctions.php
is_admin()
условные проверки в ваш обратный вызовwp_enqueue_scripts
уже слишком поздно . Разделите ваш код отмены регистрации / регистрации в обратный вызов, подключенный кinit
.get_template_directory()
а неTEMPLATEPATH
Собираем все вместе:
Но опять же: это действительно не лучший подход. Лучше всего просто удалить обратные вызовы плагина add_action (), которые отменяют регистрацию ядра jQuery, или использовать плагины, которые не делают что-то настолько безрассудное, как замена jQuery, встроенного в ядро.
источник
_doing_it_wrong()
называть то, что не просто jQuery, «jQuery». Также: сам jQuery можно просто снять с очереди , чтобы он не загружался дважды.wp_dequeue_script()
Вызов просто должно произойти с достаточным приоритетом , чтобы обеспечить , что ничто его ставит в очередь позже.