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

25

Я пытался включить эффекты jquery ui (точнее, эффект встряхивания) в мою тему WordPress. До сих пор я был в состоянии включить только сценарий jQuery, но я действительно не знаю, где разместить сценарии пользовательского интерфейса и как их ставить в очередь.

Это код, который у меня есть. Это явно не работает:

    <?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>

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

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

Ответы:

36

Хотя WordPress включает в себя библиотеки пользовательского интерфейса jQuery, он не включает библиотеку пользовательского интерфейса / эффектов. Эта библиотека отдельная и автономная. Вам нужно будет включить копию файла effect.core.js и поставить ее в очередь отдельно.

Обратите внимание, что вы должны назвать его jquery-effect-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-effect-core.

wp_enqueue_script("jquery-effects-core");
эфирное масло
источник
1
Имейте в виду, что для реального эффекта (слепой, отскок, исчезновение, ..) вы должны явно поставить этот эффект в очередь. Как для 'исчезать':wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed
Пользователь должен поместить свой собственный Javascript в отдельный файл, а затем поставить в очередь этот файл и перечислить необходимые ему зависимости. Таким образом, WordPress (и плагины производительности) знают порядок загрузки этих скриптов и размещают их в правильном порядке на странице.
Дейв
8

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

EAMann
источник
1
Не совсем верно. Пока он вызывает их до вызова wp_head (), это должно работать нормально. Их не нужно зацеплять, и они не должны зацепляться за инициацию в любом случае. Если вы собираетесь их где-то подключить, подключите их к ловушке действия 'wp_enqueue_scripts'. Вот для чего это.
Отто
1
@ Отто то, что ты сказал, звучит логично. Но есть ли у вас объяснение, почему в кодексе написано, что пишет @EAMann - «Используйте действие init для вызова этой функции»? И его пример взят оттуда ... codex.wordpress.org/Function_Reference/wp_enqueue_script
Леа Коэн,
Кодекс случайный местами. Лучшее действие для этого - wp_enqueue_scripts для внешнего интерфейса или admin_enqueue_scripts для внутреннего интерфейса. Подсоединение к init будет работать, но без необходимости ставит скрипт в очередь по всему сайту.
Отто
Я обновил свой фрагмент кода соответственно. Первоначально это была быстрая, интуитивная реакция, основанная на рекомендациях Кодекса ... использование wp_enqueue_scripts, безусловно, лучший способ избежать лишней is_admin()проверки.
EAMann
Это также неправильный путь - плагины производительности должны знать зависимости. Автор должен написать свой собственный файл .js и поставить его в очередь и назвать зависимости - WordPress будет обрабатывать все остальное.
Дейв
7

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

Родриго Сийру
источник
3
Вы даже можете загрузить все библиотеки jQuery из CDN Google вместо своего собственного сайта.
Ян Фабри
Я бы очень не рекомендовал загружать скрипты из иностранных источников. Я занимался этим довольно долго, и (редко) случалось, что хост не работал, поэтому у нескольких клиентов были проблемы со своими страницами одновременно.
Джулиан Ф. Вейнерт
1
@ JulianF.Weinert - это обоюдоострый меч, с хорошим cdn означает меньшую задержку, но отсутствие контроля в случае неудачи. Тем не менее, если Google CDN выходит из строя, половина интернета выйдет из строя, так что ваш не будет единственным. Однако вероятность того, что он будет недоступен и не будет кэшироваться в браузере пользователя, невелика. Для большинства ситуаций использование CDN является преимуществом.
Алекс
Правда. Я не говорил о полномасштабном CDN, который, конечно, был бы абсолютно уместен, поскольку он предназначен именно для этого использования. Загрузка сценариев с любого сайта john-doe.com немного рискованна, я думаю
Джулиан Ф. Вейнерт
3

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

редактор
источник
1
Я подумал, что вы, возможно, правы (иногда имена сценариев WP-регистров отличаются от используемых стандартных имен), но в этом случае регистрация 'jquery-ui-core' должна работать. Это перечислено в core.trac.wordpress.org/browser/branches/3.0/wp-includes/…
goldenapples
Хорошая точка зрения! Я предполагал, что он хочет загрузить только ту библиотеку jQuery, и в этом случае загрузка остальных будет немного ненормальной.
редактор
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');
Тарек
источник
4
Вы не должны использовать хук инициализации для постановки в очередь. Используйте хук wp_enqueue_scripts только для внешнего интерфейса или хук admin_enqueue_scripts для внутреннего интерфейса.
Отто
Не знал, что wp_enqueue_scriptsдействие только для переднего конца. Спасибо :)
Тарек
0

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

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

Дейв Хилдич
источник
1
Вы правильно поняли. Использование зависимостей в ваших собственных вызовах wp_enqueue_script - это правильный способ включить jquery / jquery-ui / etc. Там нет необходимости ставить их в очередь отдельно.
Михаэ Павлос Майкл
И если вы ставите их в очередь отдельно, когда ваш скрипт зависит от них, ваш скрипт может / сломается на сайтах, которые оптимизируют производительность - например, если скрипты объединены в один скрипт для ускорения загрузки, или если они отложены или свернуты (зависит от минификации, но порядок может измениться). Если вы не сказали WordPress, что ваш скрипт зависит от других скриптов, вы не можете гарантировать порядок их загрузки.
Дейв Хилдич