Einschließlich jQuery und JavaScript-Dateien den richtigen Weg

Ich habe Probleme damit. Ich bin mir nicht sicher, wie ich es richtig machen soll, und ich lese so viele verschiedene Techniken und Wege, es zu tun, von denen ich nicht weiß, was ich daraus machen soll.

Einige Fragen und Probleme, die ich habe:
– Sollte ich die jQuery, die in WordPress enthalten ist, überhaupt abmelden?
Ich mache es gerade mit dem folgenden Code:

function uw_load_scripts() { // De-register the built in jQuery wp_deregister_script('jquery'); // Register the CDN version wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); // Load it in your theme wp_enqueue_script( 'jquery' ); } add_action( 'wp_enqueue_scripts', 'uw_load_scripts' ); 

Das funktioniert. Soll ich das für jeden tun, so oder für alle außer admin (damit das Backend die WordPress-Version nutzt?):

 if (function_exists('load_my_scripts')) { function load_my_scripts() { if (!is_admin()) { wp_deregister_script( 'jquery' ); wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); wp_enqueue_script('jquery'); } } } add_action('init', 'load_my_scripts'); 

Diese Version funktioniert eigentlich gar nicht, ich bekomme die WordPress jQuery-Version und nicht die Google-Version.

Wie kann ich meine eigenen Skripte (Slider-Skripte, moderniszr und meine eigene custom.js) korrekt hinzufügen? Ich denke, ich sollte das auch über functions.php tun und nicht im Header, wie ich es jetzt mache, aber ich bin mir nicht sicher, wie ich das machen würde.

Solutions Collecting From Web of "Einschließlich jQuery und JavaScript-Dateien den richtigen Weg"

Erste Faustregel: Lege keine core-gebündelten Skripte ab und ersetze sie durch andere Versionen , außer du bist dir absolut sicher, dass kein Theme, Plugins oder Core selbst aufgrund der Versionsänderung zerbrechen wird. Wenn Sie nicht unbedingt eine alternative Version eines Core-gebündelten Skripts benötigen , verwenden Sie einfach das, was mit Core gebündelt ist.

Zweitens empfehle ich dringend, sich in wp_enqueue_scripts für die Skriptregistrierung und Enqueueing zu engagieren, anstatt init . (Es funktioniert bei init , aber aus einer spielerisch-mit-anderen Perspektive ist es am besten, den semantisch korrektesten Hook zu verwenden.)

Drittens, um Ihre eigenen benutzerdefinierten Skripts in die Warteschlange einzureihen, verwenden Sie dieselben Methoden wie oben:

 < ?php function wpse45437_enqueue_scripts() { if ( ! is_admin() ) { $script_path = get_template_directory_uri() . '/js/'; // Enqueue slider script wp_enqueue_script( 'wpse45437_slider', $script_path . 'slider.js', array( 'jquery' ) ); // Enqueue modernizr script wp_enqueue_script( 'wpse45437_modernizr', $script_path . 'modernizr.js', array( 'jquery' ) ); } } add_action( 'wp_enqueue_scripts', 'wpse45437_enqueue_scripts' ); ?> 

Fügen Sie einfach die Skripte hinzu, die Sie in die Warteschlange stellen möchten.

Hoffe, das hilft, wp_enqueue_scripts den Codex für wp_enqueue_scripts für weitere Informationen.

  1. Verwenden Sie init zum Einreihen . Verwenden Sie wp_enqueue_scripts für Front-End- admin_enqueue_scripts und admin_enqueue_scripts für die Admin-Seite. Sie können init jedoch Skripte registrieren .
  2. Der Hook wp_enqueue_scripts nur am Frontend (und nicht auf der is_admin() – Sie müssen also is_admin() nicht überprüfen.
  3. Wenn Sie keinen bestimmten Grund haben, etwas anderes zu tun, würde ich vorschlagen, Skripte mit functions.php für Themen oder in einem Plug-in zu registrieren und in eine Warteschlange zu stellen. Du stellst einfach:

      function myprefix_load_scripts() { // Load scripts here } add_action( 'wp_enqueue_scripts', 'myprefix_load_scripts' ); 
  4. Wenn ein Skript bei der Verwendung eines wp_enqueue_script in die Warteschlange wp_enqueue_script werden soll, können Sie wp_enqueue_script im wp_enqueue_script Callback verwenden, um es nur bei Bedarf in die Warteschlange zu stellen (dies wird in der Fußzeile seit 3.3 gedruckt).

  5. Sie sollten das vorhandene jQuery nicht auf der Administratorseite neu registrieren. Sie können etwas brechen: D.

  6. Plug-Ins sollten die vorhandene jQuery nicht neu registrieren.

  7. Sie sollten die Vor- und Nachteile einer erneuten Registrierung von jQuery abwägen. Zum Beispiel kann es einige Plug-Ins brechen, wenn Sie eine alte Version registrieren (vielleicht nicht jetzt, aber in der Zukunft …)

Warnung: Die Abmeldung der gepackten Version von jQuery von WP zugunsten Ihrer eigenen kann zu Problemen führen, besonders wenn Sie nicht besonders vorsichtig sind, um sicherzustellen, dass Sie die Version, auf die Sie zeigen, ändern, wenn WP seine Version aktualisiert. Dies gilt doppelt für Plugins, die ihre Plugins oft (oder oft zumindest) für maximale Kompatibilität mit der WP-Version von jQuery schreiben sollten.

Das heißt, Ihre erste Version ist korrekt – sie ist an wp_enqueue_scripts . Ihre zweite function ist mit init , weshalb sie möglicherweise nicht richtig funktioniert.

Fügen Sie Ihre eigenen Skripte auf ähnliche Weise hinzu:

 function bbg_enqueue_scripts() { // You should probably do some checking to see what page you're on, so that your // script only loads when it needs to wp_enqueue_script( 'bbg-scripts', get_stylesheet_directory_url() . '/js/bbg-scripts.js', array( 'jquery' ) ); } add_action( 'wp_enqueue_scripts', 'bbg_enqueue_scripts' ); 

Ich gehe hier davon aus, dass Sie Skripte aus einem js Verzeichnis in Ihr aktuelles Themenverzeichnis js . Ändern Sie den URI-Parameter, wenn das nicht der Fall ist. Das dritte Parameter- array( 'jquery' ) besagt, dass bbg-scripts von jquery und daher später geladen werden sollten. Weitere Informationen finden Sie unter https://codex.wordpress.org/Function_Reference/wp_enqueue_script .

 if (function_exists('load_my_scripts')) { function load_my_scripts() { if (!is_admin()) { wp_deregister_script( 'jquery' ); wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', array(), null, false); wp_enqueue_script('jquery'); } } } add_action('init', 'load_my_scripts'); 

Das wird nichts machen … Ich vermute du meinst es

 if (!function_exists('load_my_scripts')) { 

Ihr Beispiel wird nur die function load_my_scripts laden, wenn sie bereits existiert (was nicht der Fall ist, und wenn das passiert, würde es einen Fehler erzeugen)

Wenn Sie aus Performancegründen jQuery und andere Core-JS-Dateien von einem CDN laden möchten, stellen Sie sicher, dass Sie die gleiche Version laden, um zu verhindern, dass bei Core- und Plugin-functionen unangenehme Dinge passieren. So was:

 $wp_jquery_version = $GLOBALS['wp_scripts']->registered['jquery-core']->ver; $jquery_version = ( $wp_jquery_version == '' ) ? '1.8.3' : $wp_jquery_version; // fallback, just in case wp_deregister_script('jquery'); wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/'. $jquery_version .'/jquery.min.js', $jquery_version, false ); wp_enqueue_script('jquery'); 

Nachdem ich alle verschiedenen Methoden zum Laden von jquery (nicht nur in diesem Beitrag) überprüft habe, habe ich festgestellt, dass keiner von ihnen all diese Dinge tut:

  1. Registrieren (und vielleicht Enqueue) jquery mit einer function, so dass es von Plugins verwendet werden kann.
  2. Laden Sie es von Google CDN mit Protokoll relativen URL.
  3. Fallback auf lokale Kopie, wenn Google offline ist.

Es gibt viele alternative Versionen, die einige davon in der Liste ausführen, aber nicht alle, also habe ich meine Version geschrieben, die einige der bereits verfügbaren Methoden kombiniert und modifiziert hat. Hier ist es:

 function nautilus7_enqueue_scripts() { // Load jquery from Google CDN (protocol relative) with local fallback when not available if ( false === ( $url = get_transient('jquery_url') ) ) { // Check if Google CDN is working $url = ( is_ssl() ? 'https:' : 'http:' ) . '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'; $resp = wp_remote_head($url); // Load local jquery if Google down if ( is_wp_error($resp) || 200 != $resp['response']['code'] ) { $url = get_template_directory_uri() . '/js/vendor/jquery-1.7.2.min.js'; } // Cache the result for 5 minutes to save bandwidth set_transient('jquery_url', $url, 60*5); } // Deregister WordPress' jquery and register theme's copy in the footer wp_deregister_script('jquery'); wp_register_script('jquery', $url, array(), null, true); // Load other theme scripts here } add_action('wp_enqueue_scripts', 'nautilus7_enqueue_scripts'); 

Um Bandbreite zu sparen und nicht jedes Mal, wenn die Seite neu geladen wird, Google zu pingen, merkt es sich mithilfe der WordPress Transient API 5 Minuten lang, ob Google CDN online ist oder nicht.