wake-up-neo.com

Warum wird jQuery 2.1 nicht im Header geladen?

Da ich jQuery 2.1 anstelle von 1.11 verwenden möchte, muss ich jQuery zunächst abmelden. Dann registrieren Sie es mit den neuen Werten. :

add_action( 'wp_enqueue_scripts', 'add_scripts' );

function add_scripts() {
    wp_deregister_script('jquery');
    wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js', false, '2.1.0', false);
    wp_enqueue_script('jquery');
}

Laut dem Handbuch sollte dies das Skript in den Header laden. Aber es ist in der Fußzeile geladen. Warum das?

Ich frage, weil ich ein Plugin habe, das einige Dinge im Header haben muss. Da jquery erst in der Fußzeile geladen wird, werden einige Fehler ausgegeben.

PS. Wenn ich folgendes mache:

    wp_deregister_script('jquery');
    wp_register_script( 'jquery-2', 'http:...');
    wp_enqueue_script('jquery-2');

WP lädt überhaupt keine Inhalte - es bricht komplett ab. Hat das noch jemand erlebt?

1
Steven

Theoretisch sollte der von Ihnen geschriebene Code funktionieren. In der praktischen Anwendung fehlen einige bewährte Methoden, die sich auf die Funktionsweise Ihres Codes auswirken können. Daher sollten Sie die Fehlerbehebung ein wenig durchlaufen, um alle Punkte von der Checkliste abzuhaken.

Wenn Sie die Registrierung von jquery aufheben, werden sowohl das jQuery-Core- als auch das jQuery-Migrate-Java-Script entfernt. Vermutlich versuchen Sie, nur das Core abzumelden und jQuery Migrate aktiv zu halten.

jQuery Migrate besteht aus altem jQuery-Legacy-Code, der die gesamte Funktionalität von Legacy-Inhalten auf die neue Version von jQuery portiert.

Auf derselben Seite des von Ihnen verlinkten Codex finden Sie, wenn Sie nach unten scrollen, eine Liste von Handlern für integrierte Java-Skripte, die Sie abmelden können .

Als Ergebnis müssen Sie jquery-core anstelle von jquery abmelden, um einige der Funktionen intakt zu halten. Dies schließt Plugins ein, die möglicherweise ältere jQuery-Funktionen ausführen.

Sie müssen beim letzten Argument nicht "false" anhängen, da es standardmäßig bereits false ist. Ich empfehle außerdem, Ihr Protokoll zu löschen. Dadurch wird sichergestellt, dass jQuery immer an den Browser gesendet wird, wenn Sie zu einem späteren Zeitpunkt zu https wechseln möchten .

Abschließend ist der Namensraum sehr wichtig, wenn Sie in einer großen Umgebung codieren, in der der Personalcode anderer mit Ihrem Code zusammenarbeitet. add_scripts() scheint mir ein bisschen zu allgemein, wenn Sie Ihre Funktion in die functions.php-Datei schreiben, versuchen Sie, den Namen Ihres Themas hinzuzufügen, oder schreiben Sie etwas sehr Einzigartiges, damit Sie sicher sind, dass dieselbe Funktion in Zukunft nicht mit a kollidiert Funktion, die von einem Plugin oder etwas anderem in Ihren Arbeitsdateien kommt.

add_action( 'wp_enqueue_scripts', 'YOURTHEMENAME_scripts' );

function YOURTHEMENAME_scripts() {
    wp_deregister_script('jquery-core');
    wp_register_script('jquery-core', '//ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js', false, '2.1.0');
    wp_enqueue_script('jquery-core');
}

Bitte beachten Sie, dass die Ladereihenfolge von Wordpress wie folgt ist:

Core -> Plugins -> Theme

Wenn Sie versuchen, jQuery von einem benutzerdefinierten Plugin abzumelden, übernimmt möglicherweise Ihr Thema die Skriptwarteschlange und spielt damit herum.

Wenn Sie nach all dem immer noch das Javascript in die Fußzeile bekommen, dann stimmt etwas schrecklich nicht in Ihren header.php- oder footer.php-Dateien: Einer der Gründe für Anfänger könnte sein, dass wp_head()- und wp_footer()-spezifische Hooks in Ihrem Thema vorhanden sind. ' Ich habe das so oft gesehen, dass es leicht eine Möglichkeit sein könnte.

wp_head() ist ein Hook, der für Sie Meta-Tags, die CSS-Warteschlange und die JS-Warteschlange hinzufügt, wobei das letzte Flag-Argument auf "false" gesetzt ist.

wp_footer() ist der Hook, der sich darum kümmert, Ihnen den Rest des JS hinzuzufügen, wobei das letzte Flag-Argument auf "true" gesetzt ist und zusätzliches Markup von verschiedenen Plugins generiert wird (und für die Admin-Leiste vom WP Core).

Überprüfen Sie die Position Ihrer Hook-Funktionen noch einmal. Wenn sich in Ihrer Fußzeile wp_head() befindet, ist dies möglicherweise der Grund, warum Ihre Javascript-Warteschlange zur Fußzeile hinzugefügt wird.

3
MacK

Nr. 1: Sie müssen Ihr jquery-Deregister usw. in eine Funktion einfügen, die mit dem Hook wp_enqueue_scripts aufgerufen wird. Mach es so:

add_action('wp_enqueue_scripts','jquery_2_loader');

function jquery_2_loader(){
//insert your jquery deregister and Register
}

Zweite Frage: Viele Plugins sind auf die Eingabe von JQuery angewiesen. Wenn Sie es also abmelden, können diese Plugins es nicht mehr verwenden.

1
kuchenundkakao

Sie haben Recht, dass die Übergabe von false an den Funktionsaufruf wp_register_script sicherstellen sollte, dass das Skript in der Kopfzeile der Seite platziert wird. Haben Sie andere Plugins, die möglicherweise den Speicherort Ihrer Skripte ändern? Plugins wie Autoptimize versuchen beispielsweise, Skripte "intelligent" in die Fußzeile einzufügen, um das Laden zu beschleunigen, wenn dies möglich ist.

0
futuernorn