Gdzie jest właściwe miejsce do rejestracji / kolejkowania skryptów i stylów

43

Korzystam już z WordPress 3.1.4. Nie jestem pewien, gdzie (którego haka) używam:

  • zarejestrować się i / lub kolejkować
  • skrypty i style
  • z przodu iz tyłu?

Pytania:

  • Jakie są odpowiednie haki do użycia?
  • Wszystkie skrypty / style rejestracji / frontonu w interfejsie init?
  • Dlaczego nie ma admin_print_styles-{xxx}?
JM w pracy
źródło

Odpowiedzi:

62

Dlaczego rejestracja i kolejkowanie są ważne?

  • powinno być na czas - wcześniej niż skrypt / styl jest gotowy do wyświetlenia na stronie, w przeciwnym razie jest za późno;

  • powinno być warunkowe - w przeciwnym razie ładujesz rzeczy tam, gdzie ich nie potrzebujesz, powodując problemy z wydajnością i funkcjonalnością, w tym celu potrzebujesz środowiska WP załadowanego do późnego etapu.

Trzy etapy procesu

  1. register - wyjaśnia szczegóły WP dotyczące skryptu / stylu i sprawia, że ​​przechowuje te informacje;

  2. enqueue - (często łączone razem z rejestrem w jednym wp_enqueue_*()wywołaniu) - mówi WP, aby dodało skrypty / styl do kolejki, zgodnie z jej ustawieniami (zależności, ładowanie nagłówka / stopki).

  3. print - dzieje się tak, gdy WP przetwarza kolejkę, próbuje załadować coś specyficznego dla siebie lub gdy jawnie robisz to z wp_print_*()funkcją.

Struktura frontonu funkcji i haczyków

  • wp_head()

    • wp_head

      • (1) wp_enqueue_scripts()

        wp_enqueue_scripts «Tego potrzebujesz

      • (8) wp_print_styles()

      • (9) wp_print_head_scripts()

  • wp_footer()

    • wp_footer

      • (10) wp_print_footer_scripts()

Wchodzi znacznie głębiej, ale jest to proste i wystarczająco dobre dla ważnych punktów:

  • wp_enqueue_scriptsjest najodpowiedniejszym hakiem do rejestrowania i umieszczania w kolejce skryptów i stylów w interfejsie i jest do tego specjalnie przeznaczony;

  • initnie ma z tym nic wspólnego, zadziała, ale - wcześniejsze zalecenie Kodeksu, aby używać tylko tego było nieprawidłowe ;

  • możesz uciec od skryptów kolejkowania (nie stylów) dla stopki w dowolnym momencie przed wp_print_footer_scripts()wywołaniem;

  • wp_print_*haki NIE są odpowiednie dla rejestru / kolejki , są punktami w kodzie, gdy dane wyjściowe już się odbywają. Są odpowiednie do ręcznego / niestandardowego skryptu / wyjścia stylu.

Co z administratorem?

Cóż, funkcjonalność jest jeszcze bardziej złożona, rozbudowana i zagnieżdżona.

  • na początek wystarczy użyć admin_enqueue_scriptshaka (jest przekazywany $hook_suffixglobalnie dla rzeczy warunkowych ) do wszystkiego, w większości przypadków da sobie radę;

  • kiedy potrzebujesz czegoś złożonego - przejrzyj admin-header.phpi wykop stamtąd odpowiednie haki.

Co z logowaniem?

Jest określony hak o nazwie login_enqueue_scripts.

Rarst
źródło
Hmm w innej odpowiedzi na inne pytanie , zalecono mi admin_print_scripts-{xxx}. Znalazłem, że admin_print_scriptszostał wywołany, ale nie z -{xxx}np. -edit.phpna przykład. Jak słuszna jest ta odpowiedź z kolejkowania admin_print_scripts-xxxi co zamiast tego polecisz - załóżmy, że chcę dołączyć skrypty / style do niestandardowej strony dodawania / edycji typu postów (dla metaboksu)
JM w pracy
5
@JM w pracy, jak powyżej mojej osobistej opinii - trzymaj się z dala od *print*haczyków, chyba że naprawdę wiesz, dlaczego ich potrzebujesz. I ogólnie są do druku , a nie w kolejce . admin_enqueue_scriptshooks przekazuje $hook_suffixzmienną, która jest taka sama jak używana w tych dynamicznych hookach.
Rarst
$hook_suffixwygląda jak post.php na mojej stronie edycji portfela, dlaczego tak jest? Pomyślałem, że to edit.php, jak mogę ustalić, czy edytuję / publikuję portfolio, a nie zwykły post?
JM w pracy
@JM at Works szczerze mówiąc, ta zmienna jest nieco nieprzyjemna :) We własnej wtyczce łatwiej sobie z tym poradzić (powrót add_*_page()funkcji), ale na natywnych ekranach WP mogą być różne rzeczy.
Rarst
Niestety, kiedy zmieniam hak z wp_footer na wp_enqueue_scripts lub admin_print_scripts, CSS znika i nie pojawia się nigdzie w kodzie źródłowym. Oto kod, którego używam: add Działalności („wp_enqueue_scripts”, „addCSS”); TO NIE DZIAŁA, TO DZIAŁA działanie dodatkowe ('wp_enqueue_scripts', 'addCSS'); poza tym oczywiście dodaje CSS do stopki. Co ja robię źle?
Talon