it-swarm.com.de

Wie werden jQuery- und JavaScript-Dateien korrekt eingebunden?

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, aber sollte ich das für alle tun, so oder für alle außer dem Administrator (damit das Backend die WordPress-Version verwendet?):

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.

Sollte ich daher die in WordPress enthaltene jQuery abmelden?

Wie füge ich meine eigenen Skripte (Slider-Skripte, modernizr und meine eigenen custom.js) auf die richtige Weise hinzu? Ich denke, ich sollte dies auch über functions.php tun und nicht wie jetzt im Header, aber ich bin mir nicht sicher, wie ich das tun würde.

15
Johan Dahl

Erste Faustregel: Core-Bundled-Skripte nicht abmelden und durch andere Versionen ersetzen, es sei denn, Sie sind sich absolut sicher, dass kein Theme, Plug-In oder Core aufgrund der Versionsänderung beschädigt wird. Wirklich, es sei denn, Sie unbedingt benötigen eine alternative Version eines Kern-gebündelten Skripts, verwenden Sie einfach das, was mit Kern gebündelt ist.

Zweitens empfehle ich dringend, wp_enqueue_scripts für das Registrieren und Einreihen von Skripten anstelle von init zu verwenden. (Es funktioniert bei init, aber aus der Perspektive nett mit anderen spielen ist es am besten, den semantisch korrektesten Hook zu verwenden.)

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

<?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 zum Einreihen benötigen.

19
Chip Bennett

Ich hoffe, das hilft. Weitere Informationen finden Sie im Codex für wp_enqueue_scripts .

  1. Verwenden Sie init nicht für enqueue . Verwenden Sie wp_enqueue_scripts für Front-End-Inhalte und admin_enqueue_scripts für Administratoren. Sie können jedoch init für register scripts verwenden.
  2. Der Hook wp_enqueue_scripts wird nur im Front-End (und nicht auf der Anmeldeseite) ausgelöst, sodass Sie is_admin() nicht überprüfen müssen.
  3. Sofern Sie keinen bestimmten Grund haben, etwas anderes zu tun, würde ich vorschlagen, Skripte mit functions.php für Themen zu registrieren und in die Warteschlange zu stellen, oder auf andere Weise in einem Plug-In. Sie sagen einfach:

     function myprefix_load_scripts() {
       // Load scripts here
     }
     add_action( 'wp_enqueue_scripts', 'myprefix_load_scripts' );
    
  4. Wenn das Ziel ist, ein Skript in die Warteschlange zu stellen, wenn ein Shortcode verwendet wird, können Sie wp_enqueue_script im Shortcode-Rückruf verwenden, um es nur bei Bedarf in die Warteschlange zu stellen (dies wird in der Fußzeile gedruckt seit 3.3 ).

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

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

  7. Sie sollten die Vor- und Nachteile einer erneuten Registrierung von jQuery abwägen. Beispielsweise können einige Plug-Ins beschädigt werden, wenn Sie eine alte Version registrieren (möglicherweise nicht jetzt, aber in Zukunft ...).

4
Stephen Harris

Faire Warnung: Das Abmelden der WP-Paketversion von jQuery zugunsten Ihrer eigenen kann zu Problemen führen, insbesondere wenn Sie nicht besonders vorsichtig sind, um sicherzustellen, dass Sie die Version ändern, auf die Sie zeigen, wenn WP ihre Version aktualisiert . Dies gilt in zweifacher Hinsicht für Plugins, die häufig (oder zumindest häufig) ihre Plugins schreiben, um maximale Kompatibilität mit der WP -Version von jQuery zu gewährleisten.

Trotzdem ist Ihre erste Version korrekt - sie ist mit wp_enqueue_scripts verknüpft. Ihre zweite Funktion ist mit init verknüpft, weshalb sie möglicherweise nicht richtig funktioniert.

Fügen Sie auf ähnliche Weise Ihre eigenen Skripte 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 Verzeichnis js in Ihrem aktuellen Themenverzeichnis laden. Ändern Sie den URI-Parameter, wenn dies nicht der Fall ist. Der dritte Parameter array( 'jquery' ) besagt, dass bbg-scripts von jquery abhängt und daher nachgeladen werden sollte. Weitere Informationen finden Sie unter https://codex.wordpress.org/Function_Reference/wp_enqueue_script .

2
Boone Gorges
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 ... Ich vermute, Sie meinen

if (!function_exists('load_my_scripts')) {

In Ihrem Beispiel wird die Funktion load_my_scripts nur geladen, wenn sie bereits vorhanden ist (was nicht der Fall ist und wenn dies der Fall ist, wird ein Fehler verursacht).

1
Adam

Wenn Sie aus Performancegründen jquery- und andere Core-js-Dateien von einem CDN laden möchten, stellen Sie sicher, dass Sie dieselbe Version laden, um zu verhindern, dass böse Dinge mit Core- und Plug-in-Funktionen 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');
0
cjbj