Mam dwie proste funkcje, które ładują rzeczy za pomocą wp_enqueue_style()
i wp_enqueue_script()
, coś takiego:
function admin_custom_css()
{ wp_enqueue_style( 'stylesheet_name', 'stylesheet.css') };
function admin_custom_js
{ wp_enqueue_script( 'javascript_file', 'script.js') };
... i kilka stron administracyjnych utworzonych przy pomocy add_menu_page()
iadd_submenu_page()
function my_menu() {
add_menu_page('Page 1', 'bar', 'something', 'else', 'foo');
add_submenu_page( 'theme_menu', 'Subpage 1', 'Subpage', 'something', 'else', 'foo');
}
add_action('admin_menu', 'my_menu');
Jak załadować moje dwie funkcje tylko na tych stronach?
Obecnie używam:
add_action('admin_init', 'admin_custom_css' );
add_action('admin_init', 'admin_custom_js' );
Ale ładuje moje pliki na każdej stronie administratora, co wcale nie jest przyjemne.
Czy mogę to zrobić za pomocą jednego prostego wiersza functions.php
lub osobno umieszczać je w kolejce (wolę pierwszą opcję, ponieważ musiałbym edytować wiele funkcji tworzenia stron administracyjnych).
Dzięki!
wp-admin
wp-enqueue-script
admin-menu
wp-enqueue-style
admin-init
Wordpressor
źródło
źródło
Odpowiedzi:
add_menu_page
iadd_submenu_page
oba zwracają „przyrostek haka” strony, którego można użyć do identyfikacji strony za pomocą określonych haków. Jako taki, możesz użyć tego sufiksu w połączeniu ze zmiennymi zaczepamiadmin_print_styles-{$hook_suffix}
iadmin_print_scripts-{$hook_suffix}
specjalnie ukierunkować te strony.Uważam, że jest to czysta metoda dodawania tego wszystkiego, ponieważ wszystko jest obsługiwane w ramach jednej funkcji. Jeśli zdecydujesz się usunąć tę funkcję, po prostu usuń połączenie z jedną funkcją.
źródło
admin_print_scripts()
państw „admin_print_scripts
nie powinny być wykorzystywane do enqueue stylów i skryptów .” Odpowiedź @TomAuger jest w rzeczywistości poprawna, choć nie optymalna. Byłoby dobrze, gdyby zespół WP dodaładmin_enqueue_scripts-(hookname)
haczyk ...Problem z odpowiedzią @tollmanz polega na tym, że ponieważ wyłapujesz haczyki -print-styles i -print-scripts, musisz wygenerować HTML, aby ręcznie załadować skrypty. Nie jest to optymalne, ponieważ nie dostajesz ładnej zależności i wersji, które są dostarczane z
wp_enqueue_script()
iwp_enqueue_style()
. Nie pozwala także na umieszczenie rzeczy w stopce, jeśli jest to dla nich lepsze miejsce.Wróćmy więc do pytania PO: jaki jest najlepszy sposób, aby zapewnić kolejkowanie JS / CSS tylko na określonych stronach administracyjnych?
Wykonaj akcję „load - {$ my_admin_page}”, aby robić rzeczy tylko wtedy, gdy załadowana jest strona administratora konkretnej wtyczki, a następnie
Odłącz akcję „admin_enqueue_scripts”, aby poprawnie dodać swoje
wp_enqueue_script
połączenia.Wydaje się to trochę uciążliwe, ale w rzeczywistości jest bardzo łatwe do wdrożenia. Z góry:
źródło
load-$hook
haka, która uruchamia mojąoption_page_actions
funkcję, do której mogę dodać wiele innych haków / filtrów itp. Ponieważ te akcje są wywoływane tylko na wybranej stronie, haki poza tym punktem nie muszą używać haków z przestrzenią nazw (jak pokazano), który jest znacznie bardziej wydajny i intuicyjny.Jeśli używasz
get_current_screen()
, możesz wykryć, na jakiej stronie jesteś. Jest to przykład w artykule Codex że połączonego który pokazuje, jak korzystaćget_current_screen()
zadd_options_page()
ta metoda będzie działać na każdej stronie administratora.źródło
Możesz wziąć odpowiedź i nieco ją rozwinąć, co pozwoli również na warunkowe użycie ...
@tollmanz
Przykład:
źródło
Jak wspomniano powyżej @ mor7ifer, możesz użyć natywnej funkcji WordPress get_current_screen () . Jeśli przejdziesz przez wyjście tej funkcji, np .:
... zauważysz klucz o nazwie baza . Używam tego wykrywania, na której stronie się znajduję i kolejkuję, usuwam kolejkę tak:
źródło
Zastanawiałem się nad tym samym. Istnieje nowoczesna wersja, która wykorzystuje
admin_enqueue_scripts
:źródło
Z dokumentacji :
To samo z
admin_print_styles
.źródło
źródło
Aby to zrobić, musisz najpierw znaleźć nazwę strony administratora. Dodaj za
admin_enqueue_scripts
pomocąwp_die($hook)
i przejdź do konkretnej strony wtyczki, zobaczysz nazwę strony.Teraz skopiuj nazwę strony i użyj jej pod warunkiem, aby załadować skrypty na określoną stronę.
źródło