jQuery в админке WordPress. Как?

jQuery in WordPress admin

Предположим, решил человек воспользоваться найденным на каком-то сайте jQuery кодом в панели управления WordPress. Например, он хочет показывать попап с приветствием своим пользователям своего плагина или темы прямо в админке:

$(document).ready(function(){alert("Привет Прекрасный Мир Будущего!");});

Код ведь, в принципе, правильный и он работает, если загружена библиотека jQuery. Но что-то идет не так и код не выполняется. Наверно стоит прочитать документацию по WordPress и включить недостающий файл в jQuery в HTML страницу настроек своего плагина или темы. В документации говорится, что сделать это можно следующим способом:

/**
 * Enqueue jQuery script
 */
function load_my_jQuery_script() {	
  wp_deregister_script('jquery'); 
  wp_register_script('jquery', '//code.jquery.com/jquery-latest.min.js', array(), '', false); 
  wp_enqueue_script('jquery');
}
add_action('wp_enqueue_scripts', 'load_my_jQuery_script');

Т.е. сначала надо отменить регистрацию jQuery, на случай, если он уже зарегистрирован ранее, во избежании накладок. После этого можно спокойно зарегистрировать ссылку на нужную копию скрипта и, собственно, вставить его в <head> по хуку wp_enqueue_scripts.

Сказано – сделано. Нужный код прописан в тело плагина или там в functions.php темы или в тело плагина, но… что-то не работает.  Хук wp_enqueue_scripts почему-то не срабатывает и не запускает наш код. В этот момент,  кодер начинает рвать волосы на пятой точке, в надежде найти ошибку.

На самом деле, ошибки нет. Просто хук wp_enqueue_scripts срабатывает при отработке функции wp_head – той самой, что вызывается темой в режиме ее отображения на сайте, но никак не в админке WordPress.

Скажу сразу, вызывать wp_head в вашем скрипте не надо. Во-первых, ничего хорошего не получится (да, файл “jquery-latest.min.js” будет подтянут, но произойдет много того, что вам явно не нужно…) Во-вторых, jQuery уже подгружен, так как панель управления WordPress загружает его в любом случае. Она это делает сама, для собственных нужд и без вашего на то желания.

Это означает, что у вас есть все, для того, чтобы ваш код работал с самого начала. Вот только он почему-то не работает… А не работает он из-за того, что jQuery в админке WordPress функционирует в режиме “NoConflict” и, стало быть, символ $ использовать нельзя. Все, что нам нужно, так это заменить его на jQuery следующим образом:

jQuery(document).ready(function(){alert("Привет Прекрасный Мир Будущего!");});

Voilà, теперь все работает, как надо 😉

Liked Liked
No Comments