Ein Plugin so einschränken, dass nur CSS und JS auf ausgewählten Seiten geladen werden?

9

Ich möchte ein Plugin veranlassen, das Laden von CSS-Stylesheets und JavaScript-JS-Dateien nur auf die Seiten zu beschränken, für die sie benötigt werden.

Ein Beispiel für meine Frage ist das Plugin- Kontaktformular 7, mit dem ich auf einer Seite meiner Website ein Formular erstellt habe (die Seite " Kontakt "). JEDER Seite / jedem Beitrag auf der Website werden jedoch die folgenden Zeilen hinzugefügt:

<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> 

Dies lässt mich vermuten, dass dieses Plugin die Ladezeit meiner Site beeinträchtigt, für eine Erweiterung, die mich nur auf einer Seite der Site interessiert.

Meine Frage ist daher, wie ich diese zusätzlichen Zeilen von allen Seiten außer der Seite "Kontakt" entfernen kann, ohne das Plugin zu deaktivieren.

Tal Galili
quelle

Antworten:

9

Stile und Skripte werden immer von den Funktionen wp_enqueue_script()und eingerichtet wp_enqueue_style(), die an einen bestimmten Aktions-Hook gebunden sein müssen, um zu funktionieren. Ich habe einen Blick in Kontaktformular 7 geworfen, und es sieht so aus, als würde es Aktions-Tags von verwenden wpcf7_enqueue_scriptsund wpcf7_enqueue_stylesdiese zu den wp_print_scriptsund wp_print_styles-Haken hinzufügen .

Sie müssen also die Skripte und Stile von jeder Seite außer Ihrer Kontaktseite abhängen. Die wp_headAktion wird vor den Skript- und Stilaktionen ausgelöst. Daher müssen Sie der Datei functions.php Ihres Themas Folgendes hinzufügen:

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');
}

Die Funktion is_page () wird zurückgegeben, truewenn Sie sich auf der Kontaktseite befinden (vorausgesetzt, der Name lautet "Kontakt"). Sie können auch den Seiten-Slug und die Seiten-ID für den Filter verwenden. Auf allen anderen Seiten if()fügt die Bedingung der wp_headAktion die Funktion zum Entfernen von Skripten / Stilen hinzu , die unmittelbar vor den Aktionen wp_print_scriptsund wp_print_stylesausgelöst wird.

Dadurch sollte der zusätzliche Code von Ihren Seiten entfernt werden, und Sie müssen das Plug-In nicht deaktivieren oder Kerndateien bearbeiten. Die Funktionen und der Code, die ich oben aufgeführt habe, führen auch nicht dazu, dass Ihr Design beschädigt wird, wenn Sie Contact Form 7 in Zukunft entfernen. Sie müssen sich also keine Gedanken über die zukünftige Upgrade-Kompatibilität machen.

EAMann
quelle
Hallo EAMann. Tolle Lösung - danke! Denken Sie, dass diese Methode in ein Plugin eingebunden werden könnte, das überprüft, welche Hooks verwendet werden, und es dann jemandem ermöglicht, sie je nach Seitenposition zu deaktivieren?
Tal Galili
Leider gibt es viele Hooks, die in WordPress dynamisch verwendet werden. Sie können also nicht zuverlässig erkennen, welche Haken verwendet werden ... aber Sie könnten wahrscheinlich die meisten davon auf diese Weise fangen.
EAMann
Cool. Sie haben mir gerade eine Idee für eine neue Frage gegeben: wordpress.stackexchange.com/questions/698/…
Tal Galili
Damit Sie wissen, haben Sie mir auch die Idee gegeben, mit der Entwicklung dieses Plug-
Ins
3
@EAMann und @Tal Galili - Eigentlich können Sie alle Hooks erfassen, auch die dynamischen mit dem allHook, siehe wordpress.stackexchange.com/questions/307
MikeSchinkel