Skrypty motywu można wyłączyć tylko na wybranych podstronach WordPressa bez usuwania ich z całej witryny. Służy do tego funkcja wp_dequeue_script(), wywołana w pliku functions.php z użyciem hooka wp_enqueue_scripts i odpowiednio wysokiego priorytetu.
Dlaczego wyłączać skrypt tylko na wybranej stronie?
Motyw WordPressa często ładuje swoje skrypty na każdej podstronie, nawet gdy dana funkcja jest potrzebna tylko w jednym miejscu. Niepotrzebny JavaScript zwiększa liczbę zasobów do pobrania, może wpływać na wynik Lighthouse i powodować konflikty z innymi elementami strony.
Zamiast usuwać plik skryptu z motywu, można odłączyć go podczas generowania konkretnej strony. WordPress używa do tego identyfikatora zwanego handle. Funkcja wp_enqueue_script() służy do dodawania skryptów, a wp_dequeue_script() pozwala wycofać wcześniej dodany skrypt z kolejki.
Jak znaleźć handle skryptu?
Najpierw trzeba ustalić, jaki handle ma skrypt przeznaczony do wyłączenia. Sama nazwa pliku JavaScript, na przykład theme.js, zwykle nie wystarczy. Handle jest nazwą nadaną skryptowi podczas jego rejestrowania w WordPressie.
W przeglądarce możesz sprawdzić, jaki plik jest ładowany na danej stronie:
- Otwórz podstronę, na której działa skrypt.
- Uruchom Narzędzia Deweloperskie klawiszem F12 i przejdź do zakładki Elements.
- Użyj wyszukiwarki, naciskając Ctrl+F, a następnie wpisz fragment nazwy pliku JavaScript.
- Skopiuj adres pliku i sprawdź kod motywu, aby znaleźć funkcję
wp_enqueue_script()oraz pierwszy argument tej funkcji, czyli handle.
Przydatne mogą być też inne miejsca w Chrome DevTools:
- Network – pokazuje pliki JavaScript pobierane podczas ładowania strony.
- Sources – pozwala otworzyć zawartość załadowanego pliku i potwierdzić jego nazwę.
- Coverage – wskazuje, jaka część kodu CSS i JavaScript została użyta podczas ładowania strony.
- Wyszukiwanie w plikach motywu – pozwala znaleźć wywołanie
wp_enqueue_script()i przypisany handle.
Jeżeli w kodzie znajdziesz na przykład taki zapis:
wp_enqueue_script(
'theme-interactions',
get_template_directory_uri() . '/assets/js/theme.js',
array(),
'1.0',
true
);
handle tego skryptu to theme-interactions, a nie theme.js.
Jak wyłączyć skrypt w functions.php?
Kod dodaj do pliku functions.php motywu potomnego. Motyw potomny chroni własne zmiany przed aktualizacją motywu nadrzędnego. Edycja pliku functions.php motywu głównego może spowodować utratę kodu po instalacji nowej wersji.
Podstawowy kod odłączający skrypt wygląda tak:
/**
* Wyłącza wskazany skrypt na stronie witryny.
*/
function wylacz_skrypt_motywu() {
wp_dequeue_script( 'theme-interactions' );
wp_deregister_script( 'theme-interactions' );
}
add_action( 'wp_enqueue_scripts', 'wylacz_skrypt_motywu', 100 );
Zastąp theme-interactions właściwym handle znalezionym w kodzie motywu. wp_dequeue_script() usuwa skrypt z kolejki dołączanych zasobów, a wp_deregister_script() usuwa jego rejestrację. W wielu przypadkach wystarczy samo wp_dequeue_script(), szczególnie gdy chcesz tylko zatrzymać ładowanie skryptu na danej stronie.
Liczba 100 oznacza priorytet wykonania funkcji. Motyw zazwyczaj dodaje własne skrypty z niższym priorytetem, więc funkcja odłączająca wykona się później. Dzięki temu WordPress zdąży zarejestrować i dodać skrypt do kolejki, zanim spróbujesz go wyłączyć.
Uwaga: po wyłączeniu skryptu sprawdź działanie strony. Niektóre pliki odpowiadają za menu mobilne, galerie, formularze lub inne elementy interfejsu. Ich usunięcie może spowodować błędy w konsoli albo wyłączyć funkcję widoczną dla użytkownika.
Jak ograniczyć wyłączenie do wybranych podstron?
Warunek należy umieścić wewnątrz funkcji odłączającej skrypt. Dla pojedynczej strony użyj is_page(). Możesz przekazać do niej identyfikator strony albo jej slug.
/**
* Wyłącza skrypt tylko na stronie o ID 42.
*/
function wylacz_skrypt_na_stronie() {
if ( is_page( 42 ) ) {
wp_dequeue_script( 'theme-interactions' );
wp_deregister_script( 'theme-interactions' );
}
}
add_action( 'wp_enqueue_scripts', 'wylacz_skrypt_na_stronie', 100 );
ID strony znajdziesz w panelu WordPressa podczas edycji podstrony. W adresie zaplecza zobaczysz parametr podobny do post=42. Liczba po post= jest identyfikatorem wpisu lub strony.
Możesz też użyć sluga:
if ( is_page( 'kontakt' ) ) {
wp_dequeue_script( 'theme-interactions' );
}
W przypadku wpisu zastosuj is_single(), a dla konkretnego szablonu strony – is_page_template():
function wylacz_skrypt_w_wybranych_miejscach() {
if ( is_single( 123 ) || is_page_template( 'templates/landing-page.php' ) ) {
wp_dequeue_script( 'theme-interactions' );
wp_deregister_script( 'theme-interactions' );
}
}
add_action( 'wp_enqueue_scripts', 'wylacz_skrypt_w_wybranych_miejscach', 100 );
Po zapisaniu zmian wyczyść pamięć podręczną, jeśli korzystasz z cache lub optymalizacji zasobów. Następnie sprawdź stronę docelową oraz kilka innych podstron. Skrypt powinien zniknąć tylko tam, gdzie spełniony jest warunek, a pozostałe strony powinny zachować pierwotne działanie motywu.
Najważniejsze są trzy elementy: prawidłowy handle, funkcja wp_dequeue_script() oraz priorytet 100 w akcji wp_enqueue_scripts. Dopiero po połączeniu ich z warunkiem is_page(), is_single() lub is_page_template() skrypt zostanie wyłączony tylko w wybranym miejscu.