Jak poprawnie dołączyć efekty jquery-ui do wordpress


25

Próbowałem dołączyć efekty interfejsu jquery (w szczególności efekt shake) do mojego motywu Wordpress. Do tej pory mogłem tylko dołączyć skrypt jQuery, ale tak naprawdę nie mam pojęcia, gdzie umieścić skrypty interfejsu użytkownika i jak je kolejkować.

To jest kod, który mam. To oczywiście nie działa:

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

Dzięki za pomoc!


5
Jedna uwaga: nie powinieneś kolejkować kolejki jquery, ponieważ jest ona już wymieniona jako zależność jquery-ui-core.
goldenapples,

Odpowiedzi:


36

Chociaż WordPress zawiera biblioteki interfejsu użytkownika jQuery, nie zawiera biblioteki interfejsu użytkownika / efektów. Ta biblioteka jest osobna i samodzielna. Musisz dołączyć kopię pliku efekty.core.js i kolejkować go osobno.

Zauważ, że powinieneś nazwać go jquery-efekty-core podczas kolejkowania, aby zachować spójność nazewnictwa.

Możesz dołączyć to w ten sposób:

wp_enqueue_script("jquery-effects-core",'http://example.com/whatever/effects.core.js', array('jquery'), '1.8.8');

Edycja : Ta odpowiedź została napisana przed WordPress 3.3, który teraz zawiera różne biblioteki efektów jako część rdzenia. Możesz po prostu kolejkować fragmenty biblioteki efektów, których potrzebujesz teraz.

Listę ślimaków dla tych plików można znaleźć w wp-zawiera / skrypt-loader.php, ale ślimak rdzenia to jquery-efekty-rdzeń.

wp_enqueue_script("jquery-effects-core");

1
Pamiętaj, że w celu uzyskania rzeczywistego efektu (ślepa, odbijająca się, zanikania, ...) musisz wyraźnie zakolejkować ten efekt. Jak dla „zanikania”:wp_enqueue_script( 'jquery-effects-fade' );
SunnyRed

Użytkownik powinien umieścić własny kod JavaScript w osobnym pliku, a następnie umieścić go w kolejce i wymienić potrzebne zależności. W ten sposób WordPress (i wtyczki wydajnościowe) znają kolejność wymaganą do załadowania tych skryptów i umieści je w odpowiedniej kolejności na stronie.
Dave Hilditch

8

@dabito,

Nie ładujesz skryptów poprawnie ... Nie wywoływaj wp_enqueue_script()pliku szablonu motywu (wygląda na to, że tak header.php). Musisz wywołać tę funkcję z osobnego haka.

W functions.phppliku motywu umieść następujący kod:

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

Jeśli oba skrypty są poprawnie zarejestrowane, powinno to wczytać je dobrze (poprzez dodanie odpowiednich <script />tagów w nagłówku. Wtedy twój drugi kod JavaScript powinien działać.

Jeśli chcesz dodać skrypty do strony administratora rzeczy, dodaj admin_enqueue_scriptszamiast tego swoje działanie .


1
Niezupełnie prawda. Tak długo, jak wywołuje je przed wywołaniem wp_head (), powinno to działać poprawnie. Nie trzeba ich zaczepiać i tak czy inaczej nie powinny być uzależnione od inicjacji. Jeśli zamierzasz je gdzieś zaczepić, zaczep je do zaczepu akcji „wp_enqueue_scripts”. Po to jest.
Otto,

1
@Otto To, co powiedziałeś, brzmi logicznie. Ale czy masz wyjaśnienie, dlaczego w kodeksie jest napisane to, co napisał @EAMann - „Użyj akcji init, aby wywołać tę funkcję”. A jego przykład jest wzięty stamtąd ... codex.wordpress.org/Function_Reference/wp_enqueue_script
Lea Cohen

Kodeks jest miejscami przypadkowy. Najlepszym działaniem do tego celu jest „wp_enqueue_scripts” dla interfejsu użytkownika lub „admin_enqueue_scripts” na zapleczu. Podłączenie do init będzie działać, ale niepotrzebnie będzie kolejkować skrypt na całej stronie.
Otto

Zaktualizowałem odpowiednio mój fragment kodu. Pierwotnie była to szybka reakcja jelita na podstawie odwołania do Kodeksu ... używanie wp_enqueue_scriptsjest zdecydowanie lepszym sposobem i pozwala uniknąć dodatkowej is_admin()kontroli.
EAMann

Jest to również niewłaściwy sposób - wtyczki wydajnościowe muszą znać zależności. Autor powinien napisać własny plik .js, umieścić go w kolejce i nazwać zależności - WordPress zajmie się resztą.
Dave Hilditch

7

Możesz także umieścić w kolejce cały interfejs jQuery bezpośrednio z Google. Tak to robię:

wp_enqueue_script('jquery-ui', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.6/jquery-ui.min.js', array('jquery'), '1.8.6');

A ponieważ jQuery jest wymienione jako zależność dla interfejsu użytkownika jQuery, nie trzeba go kolejkować ręcznie. WordPress zrobi to automatycznie.


3
Możesz nawet załadować wszystkie biblioteki jQuery z CDN Google zamiast z własnej strony.
Jan Fabry,

Odradzałbym ładowanie skryptów z zagranicznych źródeł. Robiłem to dość długo i (rzadko) zdarzało się, że host nie działał, więc wielu klientów miało problemy ze swoimi stronami na raz.
Julian F. Weinert

1
@ JulianF. Weinert to miecz obosieczny, z dobrym cdn oznacza mniejsze opóźnienie, ale brak kontroli, jeśli zawiedzie. To powiedziawszy, jeśli Google cdn spadnie, połowa Internetu ulegnie awarii, więc twój nie będzie jedyny. Prawdopodobieństwo, że zostanie ono wyłączone i nie będzie buforowane w przeglądarce użytkownika, jest niewielkie. W większości sytuacji korzystanie z cdn jest zaletą.
Alex

Prawdziwe. Nie mówiłem o pełnej wersji CDN, która oczywiście byłaby w tym przypadku absolutnie w porządku, ponieważ jest zaprojektowana do takiego właśnie zastosowania. Ładowanie skryptów z dowolnego john-doe.com jest jednak trochę ryzykowne, myślę
Julian F. Weinert

3

Wygląda na to, że nie ma domyślnego obciążenia dla tej biblioteki jQuery (pełna lista tutaj ), więc prawdopodobnie będziesz musiał zarejestrować skrypt przed umieszczeniem go w kolejce.


1
Myślałem, że masz rację (czasami nazwy, pod którymi WP rejestruje skrypty, są inne niż używane nazwy standardowe), ale w tym przypadku rejestracja „jquery-ui-core” powinna działać. Jest wymieniony w core.trac.wordpress.org/browser/branches/3.0/wp-includes/…
goldenapples

Słuszna uwaga! Zakładałem, że chciał załadować tylko tę bibliotekę jQuery, w którym to przypadku ładowanie reszty byłoby nieco napuszone.
redaktor,

3

Tylko kilka wskazówek. Podczas kolejkowania skryptu kolejkuje on całą witrynę, w tym panel administratora. Jeśli nie chcesz skryptu w panelu administracyjnym, możesz dołączyć go tylko dla witryny w interfejsie użytkownika.

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
Nie powinieneś używać haka inicjującego do kolejkowania. Użyj haka wp_enqueue_scripts tylko dla interfejsu lub haka admin_enqueue_scripts dla interfejsu.
Otto

Nie wiedziałem, że wp_enqueue_scriptsakcja jest tylko dla interfejsu. Dzięki :)
Tareq

0

Wszystkie odpowiedzi tutaj, chociaż działają, są technicznie błędne.

Prawidłowym sposobem włączenia jquery-ui i innych bibliotek jest uwzględnienie ich jako zależności własnego skryptu.

Jest to ważne, ponieważ narzędzia wydajności mogą sprawdzać te zależności, aby zmienić kolejność ładowania skryptów w celu optymalizacji witryny.

Jeśli więc chcesz użyć jquery i jquery-ui, utwórz własny plik skryptu .js i kolejkuj go w ten sposób, z wymienionymi zależnościami - nie potrzebujesz osobnego polecenia kolejkowania dla każdej używanej biblioteki:

wp_enqueue_script('your-script-handle', 
 plugins_url('your-script-file.js', __FILE__), 
 array('jquery', 'jquery-effects-core', 'jquery-ui-core')
);

Listę wszystkich dostępnych skryptów do dodania jako zależności można znaleźć tutaj: https://developer.wordpress.org/reference/functions/wp_enqueue_script/


1
Masz rację. Używanie zależności we własnych wywołaniach wp_enqueue_script jest poprawnym sposobem dołączenia jquery / jquery-ui / etc. Nie ma potrzeby kolejkowania ich osobno.
Michae Pavlos Michael

A jeśli kolejkujesz je osobno, gdy skrypt zależy od nich, skrypt może / będzie działać w witrynach optymalizujących wydajność - np. Jeśli skrypty zostaną połączone w jeden skrypt, aby przyspieszyć ładowanie, lub jeśli zostaną odroczone lub zminimalizowane (zależy od minifcation, ale kolejność może ulec zmianie). Jeśli nie powiedziałeś WordPressowi, że twój skrypt zależy od innych skryptów, nie możesz zagwarantować kolejności ich ładowania.
Dave Hilditch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.