Подключение jQuery в WordPress
Создаю свою первую тему с нуля в WordPress 3.4.1. Я знаю, что WordPress уже содержит последнюю версию jQuery через Google. Я читал о проблемах, которые возникают, если скрипт не подключен правильно, поэтому хочу следовать рекомендованным способам кодирования насколько это возможно. Я хочу убедиться, что скрипт загружен, что, как я понимаю, выполняется с помощью следующего PHP-скрипта в файле functions.php (взято из WordPress Codex).
<?php
// Функция для подключения скриптов
function my_scripts_method() {
wp_enqueue_script( 'jquery' );
}
Я хочу создать пользовательское меню с использованием jQuery, так что достаточно ли просто разместить скрипт, который я хочу активировать, в header или PHP секции?
Также, если я хочу подключить другой скрипт, который не включен в WordPress изначально, достаточно ли просто добавить следующий PHP-код к вышеуказанному коду в файле functions.php?
wp_register_script( 'jqueryexample', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');
Я хорошо разбираюсь в HTML и CSS, но PHP и JavaScript для меня относительно новые технологии, буду благодарен за любую помощь.
Спасибо,
Ant

Вы должны использовать wp_enqueue_script
для загрузки скрипта в вашу тему, функция wp_register_script
только регистрирует скрипт с ключевым словом.
wp_register_script( 'jqueryexample', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');
Это просто зарегистрирует новый скрипт с именем jqueryexample
, и вы сможете загрузить этот скрипт при необходимости, используя функцию wp_enqueue_script
.
Вот пример кода для загрузки уже зарегистрированного скрипта, например jQuery, и нового собственного скрипта, например jQuery Example:
<?php
function wpse_60056_load_scripts() {
wp_enqueue_script( 'jquery' );
wp_register_script( 'jqueryexample', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');
wp_enqueue_script( 'jqueryexample' );
}
add_action('wp_enqueue_scripts', 'wpse_60056_load_scripts');
?>
Однако вы можете использовать только функцию wp_enqueue_scripts
для загрузки удаленного JavaScript, вот пример:
wp_enqueue_script('jqueryexample','http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');

+1 Заметка: начиная с версии 3.3 можно использовать wp_enqueue_script
внутри колбэков шорткодов/виджетов (или в теле страницы). Это значит, что вы можете зарегистрировать скрипт на хуке wp_enqueue_scripts
, а затем загружать его только когда он действительно нужен.

Полезно знать, полагаю это всё сводится к оптимизации веб-страницы, спасибо Стивен.

Когда вы загружаете скрипт, как предлагает Stephen Harris, скрипты будут помещены в подвал (footer). Имейте это в виду, если ваш скрипт должен загружаться раньше других. Также, если вы действительно хотите принудительно загрузить скрипт в подвал, вы можете установить пятый аргумент функций 'wp_enqueue_scripts' или 'wp_register_script' в true (Codex: http://codex.wordpress.org/Function_Reference/wp_enqueue_script).

Вы на правильном пути, но не хватает одного элемента:
add_action('wp_enqueue_scripts', 'my_scripts_method');
add_action
позволяет выполнять код в определенные моменты загрузки страницы или при конкретных событиях. Указанный выше хук говорит WordPress выполнить вашу функцию, когда он добавляет скрипты в элемент head
HTML. Ваша функция, в свою очередь, указывает WordPress добавить скрипт jQuery.
То же самое относится и к регистрации нового скрипта, но с другим хуком:
add_action('wp_enqueue_scripts', 'my_register_script_method');
function my_register_script_method () {
wp_register_script( 'jqueryexample', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');
}
Если вы переопределяете предварительно зарегистрированный скрипт, вам также следует сначала его отменить. Я использую следующий код для замены скрипта jQuery (примечание: см. второе редактирование в конце):
function my_register_script_method () {
wp_deregister_script('jquery');
wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jqueryexample.min.js');
}
Что касается места, куда следует поместить этот код. Если код специфичен для темы, его следует разместить в файле functions.php
вашей темы. Если вы планируете повторно использовать код в нескольких темах, будет удобнее поддерживать плагин со всем общим кодом.
Редактирование:
Как отмечает Стивен Харрис ниже, начиная с WordPress 3.3, вы также можете использовать wp_enqueue_scripts
после срабатывания wp_head
, например, в шорткодах или виджетах. В этом случае JavaScript будет загружен в подвале (footer).
Редактирование 2: Для jQuery и других библиотек, размещенных на Google, рекомендуется использовать http://wordpress.org/extend/plugins/use-google-libraries/ Прочитайте комментарии для обоснования от Otto.

Ван Дам, большое спасибо за быстрый ответ и информацию, я обязательно применю это на практике. Пока только одна тема (не хочу бежать, когда еще даже не научился ползать), но интересно то, что вы говорите про плагин. Спасибо, Ант

Пожалуйста. Амит тоже добавил хорошее замечание. Любые скрипты, которые вы регистрируете, также нужно ставить в очередь. Еще один совет: если jQuery нужен только на определенных страницах, используйте условные теги, такие как is_home(), чтобы загружать скрипт только на этих страницах. Это сделает ваш сайт более эффективным. Возможно, это не актуально для вашего текущего случая, но может пригодиться позже. (Страница в Codex: http://codex.wordpress.org/Conditional_Tags)

Дам, это полезно, я учту это. Я хочу, чтобы скорость сайта оставалась высокой, так что ваши слова имеют смысл. Жаль только, что нельзя использовать некоторые CSS3-переходы, но IE меня подводит в этом, хотя их довольно легко кодировать.

Без проблем. P.S. Не могли бы вы проголосовать за или принять мой ответ? Я хотел бы добавить комментарий к тому, что сказал Стивен Харрис выше, но в данный момент мне не хватает 1 голоса, чтобы комментировать ответы других. Stack exchange отличный, но в некоторых аспектах раздражает.

Готово, без проблем. Думаю, система поощрений работает таким образом, что очки означают призы, по крайней мере, я получил здесь ответы и быстро.

Пожалуйста, не используйте этот метод для подключения jQuery скрипта от Google. Вышеуказанный способ не работает и вызовет конфликты с другими скриптами, а также другие проблемы. Вместо этого используйте плагин "Use Google Libraries", если хотите использовать версии библиотек от Google. Этот плагин делает всё правильно и часто обновляется. Указанный выше метод будет работать лишь поверхностно и вызовет проблемы в будущем.

Спасибо за предупреждение, Отто. Я использовал этот плагин раньше, но он показался мне избыточным для всего одной библиотеки.

(Извините, случайно нажал Enter раньше времени). @Otto Вы имеете в виду скрипт noconflict и информацию о версии, которая передается? Или есть что-то еще?

@WvanDam Да, проблема с noconflict есть, но реальная проблема в том, что если вы измените это вручную, то при обновлении ядра ваша старая версия может сломать ядро. Лучше всегда использовать последнюю версию и использовать плагин, который будет обновляться вместе с ядром.
