Как правильно подключить эффекты jquery-ui в WordPress

19 янв. 2011 г., 00:49:40
Просмотры: 74.2K
Голосов: 29

Я пытаюсь подключить эффекты 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>

Спасибо за помощь!

1
Комментарии

Одно замечание: вам не должно потребоваться подключать jQuery вручную, так как он уже указан как зависимость для jquery-ui-core.

goldenapples goldenapples
19 янв. 2011 г. 02:14:03
Все ответы на вопрос 6
2
41

Хотя 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");
19 янв. 2011 г. 03:52:42
Комментарии

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

SunnyRed SunnyRed
10 февр. 2017 г. 19:45:50

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

Dave Hilditch Dave Hilditch
27 апр. 2017 г. 10:26:23
5

@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 вместо этого.

19 янв. 2011 г. 01:06:10
Комментарии

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

Otto Otto
19 янв. 2011 г. 03:47:04

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

Lea Cohen Lea Cohen
14 февр. 2011 г. 08:49:49

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

Otto Otto
14 февр. 2011 г. 22:54:59

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

EAMann EAMann
14 февр. 2011 г. 23:45:28

Это тоже неправильный способ - плагинам для оптимизации производительности нужно знать зависимости. Автору следует создать собственный .js файл, зарегистрировать его с указанием зависимостей - WordPress позаботится об остальном.

Dave Hilditch Dave Hilditch
27 апр. 2017 г. 10:27:23
4

Вы также можете подключить весь 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 сделает это автоматически за вас.

19 янв. 2011 г. 14:00:35
Комментарии

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

Jan Fabry Jan Fabry
21 янв. 2011 г. 13:16:29

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

Julian F. Weinert Julian F. Weinert
25 мая 2014 г. 01:32:42

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

Alex Alex
10 июл. 2016 г. 22:54:56

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

Julian F. Weinert Julian F. Weinert
11 июл. 2016 г. 00:22:22
3

Небольшая подсказка. Когда вы подключаете скрипт через очередь, он загружается на всем сайте, включая административную панель. Если вам не нужен скрипт в админке, можно подключить его только для фронтенда сайта.

function my_add_frontend_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('jquery-ui-core');
}

add_action( 'wp_enqueue_scripts', 'my_add_frontend_scripts');
24 авг. 2011 г. 18:45:39
Комментарии

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

Otto Otto
24 авг. 2011 г. 19:48:07

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

Tareq Tareq
24 авг. 2011 г. 21:31:27

Отлично, спасибо!

Dragi Postolovski Dragi Postolovski
24 июл. 2021 г. 00:12:45
2

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

19 янв. 2011 г. 00:51:21
Комментарии

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

goldenapples goldenapples
19 янв. 2011 г. 02:05:44

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

editor editor
19 янв. 2011 г. 02:18:08
2

Все ответы здесь, хотя и работают, технически неверны.

Правильный способ подключения 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/

27 апр. 2017 г. 10:24:47
Комментарии

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

Michae Pavlos Michael Michae Pavlos Michael
8 мая 2017 г. 14:58:14

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

Dave Hilditch Dave Hilditch
10 мая 2017 г. 14:19:46