wake-up-neo.com

Frage zur Funktionsweise von wp_register_script

Ok, ich verwende das Roots-Theme für WordPress (https://github.com/retlehs/roots), eine Art Starter-Theme oder Theme-Framework.

Ich bin verwirrt darüber, wie die von WordPress geladene Version von jQuery abgemeldet und erneut registriert wird , ohne die genaue Position des Skripts anzugeben .

Also in der header.php des Themas gibt es diesen Code:

...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
  <script>window.jQuery || document.write('<script src="<?php echo get_template_directory_uri(); ?>/js/libs/jquery-1.6.4.min.js"><\/script>')</script>
...

Das heißt für mich: Laden Sie das von Google gehostete jQuery-Skript herunter. Wenn das jQuery-Objekt jedoch aus irgendeinem Grund nicht vorhanden ist, erstellen Sie einfach ein Skriptelement, das das mit dem Thema gelieferte Skript lädt.

In einer Themendatei namens "roots-cleanup.php", die in der Datei "functions.php" des Themas enthalten ist, befindet sich jedoch der folgende Code, der das in WordPress enthaltene jQuery-Skript abmeldet, jQuery jedoch sofort wieder registriert, ohne die URL des Skripts wirklich anzugeben:

...
function roots_head_cleanup() {
  ...

  // don't load jQuery through WordPress since it's linked in header.php
  if (!is_admin()) {
    wp_deregister_script('l10n');
    wp_deregister_script('jquery');
    wp_register_script('jquery', '', '', '', true);
  }
}

add_action('init', 'roots_head_cleanup');
...

Jetzt habe ich nachgesehen, was die Dokumentation dazu sagt, und es heißt etwa: "Dieser Parameter [der Standortparameter] ist nur erforderlich, wenn WordPress dieses Skript noch nicht kennt."

Ich frage mich also, ob das Einfügen der Script-Tags, die jQuery laden, in die header.php-Datei bedeutet, dass WordPress sie beim Aufruf von wp_register_script kennt. Wie so:

wp_register_script('jquery', '', '', '', true);

Ich frage, weil ich diese Technik ausprobieren wollte, aber ich habe nicht die erwarteten Ergebnisse erzielt. Javaskripte, die ich mit wp_enqueue eingebunden habe und die von jQuery abhängen, werden auch dann geladen, wenn ich die Skript-Tags entfernt habe, die sie im Header enthalten. Dies sagt mir auch, dass WordPress das jQuery-Skript nicht unbedingt kennt, wenn ich den Standortparameter nicht spezifiziere.

1
racl101

Für die Aufzeichnung ist dies völlig das Falsche .

Themes sollten vermeiden (nie lesen!), Die in WordPress registrierten jQuery-Skripte abzumelden (Plug-Ins sollten dies auf keinen Fall tun).

Wenn ein Thema das jquery-Skript abmelden soll (um es zu ersetzen), sollte es ordnungsgemäß neu registriert werden:

 wp_register_script( 'jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js');

Hier liegt das Problem. Das Obige stammt aus dem Kodex . Die obige jQuery-Version ist veraltet und kann möglicherweise Plug-Ins beschädigen. Aus diesem Grund sollten Designs und Plug-Ins das Ersetzen der jQuery-Version vermeiden.

Das obige Thema ist eine wunderbare Demonstration der schlechten Praxis. Es registriert jQuery nicht nur nicht richtig neu, sondern druckt es auch direkt in der Kopfzeile aus (unabhängig davon, wann es benötigt wird).

Als Antwort auf:

Ich frage mich also, ob das Einfügen der Script-Tags, die jQuery laden, in die header.php-Datei bedeutet, dass WordPress sie beim Aufruf von wp_register_script kennt.

Nein.

Ich frage, weil ich diese Technik ausprobieren wollte, aber ich habe nicht die erwarteten Ergebnisse erzielt. Javaskripte, die ich mit wp_enqueue eingebunden habe und die von jQuery abhängen, werden auch dann geladen, wenn ich die Skript-Tags entfernt habe, die sie im Header enthalten

Ja, WordPress dachte , jQuery würde geladen (aber tatsächlich wurde "" als Pfad zur Datei übergeben - dies hätte wahrscheinlich einen Fehler verursachen müssen.). Daher wurden Ihre Skripte auch dann noch geladen, wenn jQuery nicht tatsächlich geladen wurde.

wp_register_script (und die zugehörigen Funktionen) dienen zum konfliktfreien Laden von Javascript bei gleichzeitiger Behandlung von Abhängigkeiten. Wenn Sie es nicht verwenden, da dieses Thema versucht, es zu tun, werden die Dinge zerstört.

8
Stephen Harris