Как правильно подключить эффекты jquery-ui в WordPress
Я пытаюсь подключить эффекты jquery ui (в частности эффект shake) в моей теме WordPress. Пока что мне удалось подключить только скрипт jQuery, но я совершенно не понимаю, где разместить скрипты ui и как их правильно загрузить.
Вот код, который у меня есть. Очевидно, он не работает:
<?php wp_enqueue_script("jquery"); ?>
<?php wp_enqueue_script("jquery-ui-core"); ?>
<?php wp_head(); ?>
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
<script type="text/javascript">
var $j = jQuery.noConflict();
$j(document).ready(function() {
$j("#manita-imagen").mouseover(function(){
//$j(this).animate({ opacity: "hide" })
// alert('asd');
$j(this).effect("shake", { times:3 }, 300);
});
});
</script>
Спасибо за помощь!

Хотя WordPress включает библиотеки jQuery UI, он не включает библиотеку UI/Effects. Эта библиотека является отдельной и самостоятельной. Вам нужно будет включить копию файла effects.core.js и зарегистрировать её отдельно.
Обратите внимание, что при регистрации следует использовать имя jquery-effects-core для соблюдения единообразия именования.
Вы можете включить её следующим образом:
wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');
Примечание: Этот ответ был написан до выхода WordPress 3.3, который теперь включает различные библиотеки эффектов как часть ядра. Теперь вы можете просто зарегистрировать необходимые части библиотеки эффектов.
Список идентификаторов для этих файлов можно найти в wp-includes/script-loader.php, но идентификатор ядра — jquery-effects-core.
wp_enqueue_script("jquery-effects-core");

Обратите внимание, что для реального эффекта (blind, bounce, fade и т.д.) вам нужно явно добавить этот эффект в очередь. Например, для 'fade': wp_enqueue_script( 'jquery-effects-fade' );

Пользователь должен помещать свой собственный JavaScript в отдельный файл, а затем добавлять этот файл в очередь с указанием необходимых зависимостей. Таким образом WordPress (и плагины производительности) будут знать требуемый порядок загрузки этих скриптов и разместят их на странице в правильной последовательности.

@dabito,
Вы неправильно загружаете свои скрипты... Не вызывайте wp_enqueue_script()
внутри файла шаблона темы (похоже, что это header.php
). Эту функцию необходимо вызывать через отдельный хук.
В файле functions.php
вашей темы добавьте следующий код:
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action('wp_enqueue_scripts', 'my_add_frontend_scripts');
Если оба скрипта правильно зарегистрированы, это должно загрузить их без проблем (добавляя соответствующие теги <script />
в заголовок). После этого ваш другой JavaScript-код должен заработать.
Если вы хотите добавить скрипты в админку, используйте хук admin_enqueue_scripts
вместо этого.

Не совсем верно. Пока он вызывает их до wp_head(), всё должно работать нормально. Их не обязательно добавлять через хуки, и уж точно не стоит вешать их на init. Если вы хотите их зарегистрировать, используйте хук 'wp_enqueue_scripts'. Именно для этого он и предназначен.

@Otto То, что вы говорите, звучит логично. Но есть ли объяснение, почему в кодексе написано то, что написал @EAMann - "Используйте действие init для вызова этой функции"? И его пример взят именно оттуда... http://codex.wordpress.org/Function_Reference/wp_enqueue_script

Кодекс местами несистематизирован. Лучший экшен для этого - 'wp_enqueue_scripts' для фронтенда или 'admin_enqueue_scripts' для админки. Хук init тоже будет работать, но он будет без необходимости регистрировать скрипт на всём сайте.

Я обновил свой фрагмент кода соответствующим образом. Изначально это была быстрая, интуитивная реакция на основе ссылки из Codex... Использование wp_enqueue_scripts
определенно более правильный подход и позволяет избежать необходимости в дополнительной проверке is_admin()
.

Вы также можете подключить весь jQuery UI напрямую из Google. Вот как я это делаю:
wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');
И поскольку jQuery указана как зависимость для jQuery UI, вам не нужно подключать её вручную. WordPress сделает это автоматически за вас.

Вы даже можете загружать все библиотеки jQuery из Google CDN вместо своего собственного сайта.

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

@JulianF.Weinert это палка о двух концах: хороший CDN означает меньшую задержку, но отсутствие контроля при его отказе. Тем не менее, если CDN Google упадет, половина интернета перестанет работать, так что ваш сайт будет не единственным. Вероятность того, что он будет недоступен и не закэширован в браузере пользователя, крайне мала. В большинстве ситуаций использование CDN приносит пользу.

Верно. Я не говорил о полноценном CDN, который, конечно же, здесь подошёл бы идеально, так как он как раз предназначен для такого использования. Однако загрузка скриптов с любого john-doe.com кажется мне несколько рискованной

Небольшая подсказка. Когда вы подключаете скрипт через очередь, он загружается на всем сайте, включая административную панель. Если вам не нужен скрипт в админке, можно подключить его только для фронтенда сайта.
function my_add_frontend_scripts() {
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-core');
}
add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');

Не следует использовать хук init для подключения скриптов и стилей. Используйте хук wp_enqueue_scripts только для фронтенда или хук admin_enqueue_scripts для бэкенда.

Не знал, что действие wp_enqueue_scripts
только для фронтенда. Спасибо :)

Похоже, что для этой библиотеки jQuery нет предустановленной загрузки (полный список здесь), поэтому вам, скорее всего, придётся сначала зарегистрировать скрипт перед тем, как ставить его в очередь.

Я думал, что вы можете быть правы (иногда имена, под которыми WP регистрирует скрипты, отличаются от стандартных), но в данном случае регистрация 'jquery-ui-core' должна сработать. Это указано в http://core.trac.wordpress.org/browser/branches/3.0/wp-includes/script-loader.php#L121

Все ответы здесь, хотя и работают, технически неверны.
Правильный способ подключения jQuery UI и других библиотек — указать их как зависимости вашего собственного скрипта.
Это важно, потому что инструменты производительности могут проверять эти зависимости, чтобы изменить порядок загрузки скриптов для оптимизации сайта.
Итак, если вы хотите использовать jQuery и jQuery UI, создайте свой собственный .js файл скрипта и подключите его следующим образом, указав зависимости — нет необходимости в отдельных командах enqueue для каждой библиотеки:
wp_enqueue_script('your-script-handle',
plugins_url('your-script-file.js', __FILE__),
array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);
Список всех доступных скриптов, которые можно добавить как зависимости, можно найти здесь: https://developer.wordpress.org/reference/functions/wp_enqueue_script/

Вы правильно поняли. Использование зависимостей в ваших собственных вызовах wp_enqueue_script — это правильный способ подключения jquery/jquery-ui и т.д. Нет необходимости регистрировать их отдельно.

И если вы регистрируете их отдельно, в то время как ваш скрипт от них зависит, ваш скрипт может/будет ломаться на сайтах, которые оптимизируют производительность — например, если скрипты объединяются в один для ускорения загрузки, или если они откладываются (deferred) или минифицируются (зависит от минификации, но порядок может измениться). Если вы не указали WordPress, что ваш скрипт зависит от других скриптов, вы не можете гарантировать порядок их загрузки.
