Kiedy powinienem używać wp_register_script () z wp_enqueue_script (), a nie tylko wp_enqueue_script ()?


54

Mam problem ze zrozumieniem, kiedy musisz użyć wp_register_script(). Obecnie używam po prostu czegoś takiego:

add_action( 'admin_enqueue_scripts', array( $this, 'enqueue' ) );
function enqueue() {
    $handle = 'some-handle';
    $js = 'http://example.com/my.js';
    wp_register_script( $handle, $js );
    wp_enqueue_script( $handle );
}

Dużo czytałem (Kodeks, blogi itp.), Ale nie do końca rozumiem, kiedy powinienem się najpierw zarejestrować, a kiedy po prostu kolejkować. Jako przykład zauważyłem, że TwentyTwelve nie rejestruje żadnych stylów ani skryptów, tylko je kolejkuje.

Odpowiedzi:


49

Strona wp_register_script()Kodeksu dosłownie mówi:

Bezpieczny sposób rejestrowania skryptów javascript w WordPress do późniejszego użytku z wp_enqueue_script().

Oznacza to, że jeśli chcesz zarejestrować swoje skrypty, ale nie ładujesz ich bezpośrednio na swoich stronach, możesz raz zarejestrować pliki, a następnie załadować je, gdy są potrzebne.

Na przykład:

Masz instrukcję switch, która ładuje pewną funkcjonalność, ale dwa z trzech przypadków wymagają określonego pliku javascript, a jeden nie. Możesz kolejkować skrypt za każdym razem, co kosztuje więcej zasobów lub po prostu kolejkować skrypt, gdy jest potrzebny:

...
wp_register_script( 'my-handy-javascript', ... );
...
switch( $somevar ) {
    case 'value':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    case 'value2':
        wp_enqueue_script( 'my-handy-javascript' ); // needs the file
        ...
    break;
    default:
    case 'value3': // doesn't needs the file
        ...
    break;
}

Rejestracja skryptu i kolejkowanie go nie jest konieczne, ale może zapewnić pewną logikę w kodzie, jeśli zarejestrujesz wszystkie potrzebne skrypty gdzieś w twoim miejscu, functions.phpa nie wszędzie w kodzie.

Kodeks mówi również:

Użyj wp_enqueue_scriptsakcji, aby wywołać tę funkcję lub admin_enqueue_scriptswywołać ją po stronie administratora.

Oznacza to, że jeśli chcesz kolejkować skrypt na frond-end i back-end, możesz zarejestrować skrypt raz, a następnie załadować go na front-end za pomocą wp_enqueue_scripti back-end za pomocą admin_enqueue_script.
W ten sposób nie będziesz mieć dwa razy tej samej kolejki w jednym temacie, wtyczce, widżecie lub czymkolwiek.


Dziękuję Ci. To bardzo dużo wyjaśniło. Czy uważasz, że TwentyTwelve nie zadaje sobie trudu, aby się zarejestrować, ponieważ na pewno je załaduje?
akTed

To z pewnością może być możliwe. Nie wiem, jak zbudowano motyw Twenty Twelve, ponieważ nigdy go nie używam, ale na pewno będą mieli swoje powody enqueuezamiast register.
Mike Madern

2
W tym sensie nie zgadzam się z: „Za każdym razem można skasować skrypt, co kosztuje więcej zasobów lub po prostu skasować skrypt, gdy jest potrzebny”. W przykładowym kodzie możesz usunąć wywołanie rejestru i zamiast tego mieć wiele równoważnych pełnoprawnych (z $ src arg) wywołań do wp_enqueue_style(). Byłoby to po prostu więcej wysiłku w pisaniu na klawiaturze, ale nie spowodowałoby większych wymagań dotyczących zasobów. Poprawny?
Jan-Philip Gehrcke

7
Jedną kwestią, która do tej pory była pomijana we wszystkich objaśnieniach, jest to, że można wp_register_script()po prostu zarejestrować skrypt, aby można go było używać jako zależności dla innych skryptów i można go było ładować tylko bez bezpośredniego kolejkowania.
JHoffmann

1
Chociaż dobrze to wyjaśnia, polecam również przeczytać tę odpowiedź .
lowtechsun

8

IMHO główną zaletą korzystania wp_register_scriptzanim wp_enqueue_scriptszostał zilustrowany w poniższym akapicie z Codex :

Skrypty, które zostały wstępnie zarejestrowane za pomocą wp_register_script (), nie muszą być kolejkowane ręcznie za pomocą wp_enqueue_script (), jeśli są wymienione jako zależność innego skolejkowanego kolejkowania. WordPress automatycznie dołącza zarejestrowany skrypt, zanim obejmie on kolejkowany skrypt, który wyświetla uchwyt zarejestrowanego skryptu jako zależność.

Jeśli uważasz, że nie potrzebujesz tego (np. Ponieważ jesteś w 100% pewien, że twój skrypt nie będzie zaangażowany w żadną zależność), prawdopodobnie możesz przejść bezpośrednio wp_enqueue_scripts, bez wstępnego wp_register_script.


2

Przejrzałem kilka artykułów i doszedłem do następującego wniosku. Myślę, że to pomaga.

  1. Rejestrowanie wszystkich używanych skryptów wp_register_script()to po prostu rejestracja; nie ładuję tego. Zarejestrowany skrypt nie zostanie załadowany, dopóki nie zostanie umieszczony w kolejce za pomocą wp_enqueue_script().
  2. Nie musimy rejestrować i kolejkować każdego skryptu jednocześnie. Powinniśmy po prostu kolejkować. Rejestracja nie jest obowiązkowa, ponieważ wp_enqueue_script()funkcja automatycznie rejestruje skrypt.
  3. Ale musimy się zarejestrować, gdy znajdujemy się w jednej z następujących sytuacji:

    za. Załóżmy, że potrzebujemy skryptu, aby załadować się do więcej niż jednego miejsca, np. Raz w interfejsie i raz w zapleczu (strona administratora). Teraz możemy zarejestrować skrypt tylko raz. A następnie umieść go w kolejce indywidualnie i na zapleczu. Patrz, kolejkowanie oznacza ładowanie. Rejestracja nie oznacza ładowania. W przypadku, gdy go nie zarejestrujemy, zostanie on automatycznie zarejestrowany tyle razy, ile w kolejce. Z drugiej strony, jeśli zarejestrujemy go raz, zostanie on zarejestrowany raz, bez względu na to, ile razy go kolejkujemy.

    b. Jeśli chcemy użyć skryptu jako zależności innych skryptów, nie musimy go kolejkować wp_enqueue_script(). Po prostu zarejestruj to wp_register_script(). I zostanie automatycznie zakolejkowany, gdy użyjemy jego nazwy uchwytu jako zależności innych skolejkowanych kolejki wp_enqueue_script().

    do. Jeśli chcemy, aby skrypt był ładowany w razie potrzeby, a nie ładowany jednocześnie, możemy go zarejestrować do późniejszego użycia. Przypadek użycia pokazano powyżej.

Uwaga: O ile jestem przekonany, ten sam wniosek można wyciągnąć dla arkuszy stylów CSS. Mam na myśli, że możemy używać wp_register_style()i wp_enqueue_style()w ten sam sposób.

Zauważ, że wyciągnięty tutaj wniosek odzwierciedla moją własną dedukcję. Jeśli się mylę, popraw mnie. Być może doszedłeś do innego i znacznie lepszego wniosku. Jeśli tak, to daj nam znać. Kto wie? Być może twój jest najlepszy. Jak mówi przysłowie: „tyle zasad, ile sposobów na zbawienie”. :)

https://sxbook.blogspot.com/2018/12/wpregisterscript-when-to-use.html


Twoje wyjaśnienie jest najlepsze, jakie przeczytałem. Teraz rozumiem, dlaczego tak ważna jest rejestracja skryptów. Dziękuję Ci!
Jee
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.