Как правильно подключить внешние файлы jQuery/Javascript в WordPress
Я использую Starkers как основу для моей следующей темы WP и столкнулся с небольшой проблемой. Я включил свою версию jQuery в файл header.php
, но при проверке сайта через Firebug заметил, что jquery загружается дважды. Покопавшись, я обнаружил, что файл включается не только мной, но и функцией wp_head()
.
Пытаясь исправить проблему, я заметил комментарий в файле header, который изначально был в теме Twenty Ten:
/* Всегда размещайте wp_head() непосредственно перед закрывающим тегом </head>
* вашей темы, иначе вы сломаете работу многих плагинов, которые
* обычно используют этот хук для добавления элементов в <head>, таких
* как стили, скрипты и мета-теги
*/
Вот в чем моя проблема: я понимаю, что файл jQuery должен быть подключен до любых других файлов, которые хотят его использовать, и что wp_head()
должен быть последним элементом в <head>
. Теперь я в замешательстве: стоит ли поместить wp_head()
в начало, чтобы встроенный в WP файл jQuery использовался для всех моих плагинов, хотя в комментарии говорится этого не делать.
Я пробовал закомментировать строку jQuery в функции wp_head()
, но она необходима для админ-панели, поэтому пришлось вернуть её обратно.
Я также хотел бы использовать (или хотя бы поэкспериментировать) с версией jQuery из CDN Google, но не хочу включать её дважды!
Надеюсь, вы понимаете, что я пытаюсь объяснить. Буду признателен за любые предложения по решению этой проблемы. Также буду рад советам о том, как вы управляете своими JavaScript файлами в файле header.
Спасибо!

Исходя из формулировки вашего вопроса, вы, вероятно, добавляете скрипты, прописывая теги <script>
в шаблоне. Добавляйте свои скрипты через функцию wp_enqueue_script()
в файле functions.php
вашей темы, корректно указывая зависимости от jQuery, и функция wp_head()
автоматически добавит скрипты за вас.
function my_scripts() {
wp_enqueue_script( 'my-sweet-script', get_bloginfo('template_directory') . '/script.js', array('jquery') );
}
add_action('template_redirect', 'my_scripts');
Подробнее см. на странице кодекса.

Вы правы, думая, что я добавляю скрипты с помощью тега <script>
, это именно альтернатива, которую я искал, большое спасибо! :-)

Если вы хотите добавить свой скрипт только на фронтенде, используйте хук 'template_redirect'
вместо 'init'
.

Отлично, я обновлю свой ответ. Я почти предложил обернуть enqueue в is_admin()
.

Обычно я подключаю скрипты в файле шаблона перед get_header()
, так как добавление их в functions.php
приведет к загрузке на всех страницах, что может быть избыточным. Если же мне нужен глобальный скрипт, я подключаю его в header.php
перед вызовом wp_head()
. Таким образом, подключения оказываются там, где вы ожидаете их увидеть - в секции <head>
.

Иногда лучше добавлять скрипты в нижнюю часть страницы. Для этого используется последний параметр http://codex.wordpress.org/Function_Reference/wp_enqueue_script (5-й, $in_footer) - установите его в true. Небольшая подсказка для тех, кому нужен более тонкий контроль.

Я рекомендую ознакомиться с материалом 5 советов по использованию jQuery в WordPress. Среди прочего, там показан код, необходимый для загрузки jQuery из библиотеки Google:
function my_init() {
if (!is_admin()) {
// закомментируйте следующие две строки, чтобы загрузить локальную копию jQuery
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js', false, '1.3.2');
wp_enqueue_script('jquery');
}
}
add_action('init', 'my_init');
Также вы можете посмотреть плагин Use Google Libraries.

Это действительно более правильный ответ, поскольку он показывает, как подключить jQuery из Google CDN. Хотя, как уже упомянул Джон в другом месте, если вам нужно сделать это только для фронтенда, используйте хук template_redirect
вместо init
.

Хорошее замечание о месте загрузки. Хотя, по сути, админка WordPress тоже использует jQuery, верно? В любом случае, спасибо за демонстрацию управления этим процессом.

Да, я только что нашел пост "5 советов по jQuery/WP", спасибо за ваш ответ :-)

5 советов по использованию jQuery с WordPress — ссылка больше не работает.

ПРИМЕЧАНИЕ: В примере используется «старая» версия jQuery, текущая версия WP (3.0.1) работает с jQuery 1.4.2 ...

Хотя @tnorthcutt прав, что нужно правильно убрать нативный jQuery из WP, если вы хотите загрузить свою версию, вы точно столкнётесь с проблемами, когда загружаете другую версию jQuery, отличную от той, что используется в ядре WP. И ядро, и плагины полагаются на его наличие. Поэтому если вы не будете обновлять jQuery в вашей теме каждый раз, когда обновляется WP, ваш сайт может перестать работать.
Следующий код гарантирует, что ваша тема всегда будет загружать правильную версию jQuery, сначала определяя, какая версия используется в WP, а затем загружая её из Google:
$wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver;
$jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; // резервная версия на случай, если не удалось определить
wp_deregister_script('jquery');
wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/'. $jquery_version .'/jquery.min.js', $jquery_version, false );
wp_enqueue_script('jquery');
