Ograniczasz wtyczkę do ładowania tylko jej CSS i JS na wybranych stronach?

9

Chciałbym spowodować, aby wtyczka ograniczyła ładowanie arkuszy stylów CSS i plików JavaScript JS tylko do tych stron, do których są potrzebne.

Przykładem mojego pytania jest formularz kontaktowy 7 wtyczki, którego użyłem do utworzenia formularza na jednej stronie w mojej witrynie (strona „ skontaktuj się ze mną ”). Dodaje jednak następujące wiersze do KAŻDEJ strony / postu na stronie:

<link rel='stylesheet' id='contact-form-7-css'  href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' /> 

<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script> 

To sprawia, że ​​podejrzewam, że ta wtyczka wpływa na czas ładowania mojej witryny, ponieważ rozszerzenie, które mnie interesuje tylko na jednej stronie w witrynie.

Zatem moje pytanie brzmi: jak mogę usunąć te dodatkowe wiersze ze wszystkich stron oprócz strony „Skontaktuj się ze mną”, ale bez dezaktywacji wtyczki?

Tal Galili
źródło

Odpowiedzi:

9

Style i skrypty są zawsze konfigurowane przez funkcje wp_enqueue_script()i wp_enqueue_style()które muszą być powiązane z konkretnym hakiem do działania, aby mogły działać. Zajrzałem do formularza kontaktowego 7 i wygląda na to, że używa tagów akcji wpcf7_enqueue_scriptsi wpcf7_enqueue_stylesdodaje je do haczyków wp_print_scriptsi wp_print_styles.

Musisz więc odblokować skrypty i style z każdej strony oprócz strony kontaktowej. Do wp_headpożarów działania przed działaniami skryptów i stylów, więc trzeba dodać coś takiego do pliku functions.php Twojego motywu:

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

Funkcja is_page () powróci, truegdy będziesz na stronie kontaktowej (zakładając, że nazwa to „skontaktuj się ze mną”) ... możesz również użyć informacji o stronie i identyfikatora strony dla filtra. Na wszystkich innych stronach if()warunek doda funkcję usuwania skryptu / stylu do wp_headakcji, która jest uruchamiana tuż przed akcjami wp_print_scriptsi wp_print_styles.

To powinno usunąć dodatkowy kod ze stron i nie będziesz musiał dezaktywować wtyczki ani edytować żadnych podstawowych plików. Funkcje i kod, które wymieniłem powyżej, również nie spowodują uszkodzenia motywu, jeśli usuniesz Formularz kontaktowy 7 w przyszłości, więc ... nie musisz się martwić o kompatybilność przyszłych aktualizacji.

EAMann
źródło
Cześć EAMann. Świetne rozwiązanie - dziękuję! Czy sądzisz, że tę metodę można by umieścić we wtyczce, która sprawdza, które haki są używane, a następnie pozwala na ich dezaktywację zgodnie z lokalizacją strony?
Tal Galili,
Niestety istnieje wiele haków, które są dynamicznie wykorzystywane w WordPress. Dlatego nie można niezawodnie wykryć, które haki są używane ... ale prawdopodobnie można złapać większość z nich w ten sposób.
EAMann
Fajne. właśnie podsunąłeś mi pomysł na nowe pytanie: wordpress.stackexchange.com/questions/698/...
Tal Galili
Właśnie dla mnie wiesz, że
wpadłeś
3
@EAMann i @Tal Galili - W rzeczywistości możesz przechwytywać wszystkie haki, nawet dynamiczne za pomocą allhaka, patrz wordpress.stackexchange.com/questions/307
MikeSchinkel