webentwicklung-frage-antwort-db.com.de

die Funktion plugins_url mischt den Systempfad und die URL

In meinem WordPress-Widget verwende ich den folgenden Code:

wp_register_script('jquery-ui.widget', plugins_url('assets/js/jquery-ui-1.9.2.widget.js', dirname( __FILE__ )));

Leider gibt mir der Code eine ungültige URL, die mit meinem Systempfad gemischt ist:

http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/jquery-ui-1.9.2.widget.js?ver=3.6

Hat dieses Problem möglicherweise damit zu tun, dass ich eine lokale WordPress-Installation auf einem Windows-Computer (mit Apache 2) habe?

1

Kurze Antwort

  1. jquery-ui.widget ist eines der Standardskripte, die bereits in WP enthalten und registriert sind. Sie müssen es nicht registrieren, sondern müssen es nur in eine Warteschlange stellen.
  2. In Ihrem Code ist die Funktion dirname in plugin_url falsch. Lasse nur __FILE__ als zweites Argument von plugins_url

Lange Antwort: Mehr Info

jquery-ui.widget ist eines der Standard-WordPress-Skripte , sodass Sie in den meisten Fällen die von Ihnen hochgeladene Datei nicht verwenden müssen/müssen. aber nur mit der kopie in der wp installation.

In diesem Fall müssen Sie das Skript nicht registrieren, da es bereits registriert ist. Sie müssen es nur mit wp_enqueue_script('jquery-ui-widget') in die Warteschlange stellen.

Dadurch wird die mit Wordpress gelieferte Version des Skripts korrekt in die Warteschlange gestellt. In der aktuellen Version von WP (3.6) befindet sich 'jqueri-ui widget' in Version '1.10.3'.

Haben Sie ein Problem mit dieser Version? Versuchen Sie, sie zu lösen ... auch, weil das Einbeziehen Ihrer älteren Version nicht sicher ist, dass Sie keine Probleme haben werden: Wenn ein anderes Plugin oder Thema die WP -Version desselben Skripts enthält, kann ich Ihnen das Vergnügen geben, sich vorzustellen, was passiert.

Wenn wir vergessen, dass Sie versuchen, eines der WP Standardskripte einzuschließen, liegt das Problem, das Ihr Code hat, in der Funktion plugins_url.

Doc für das zweite Argument von plugins_url im Codex ist nicht das klarste, das ich je gesehen habe:

$plugin - Pfad unter dem Plugin-Verzeichnis, zu welchem ​​übergeordneten Verzeichnis der $ -Pfad relativ sein soll.

Ist nicht klar genug, ob wir den Verzeichnispfad (genau wie Sie) oder den vollständigen Pfad (mit Dateinamen) übergeben müssen.

Aber einige Zeilen weiter unten in derselben Codexseite lesen wir: Die Funktion plugins_url() wird üblicherweise in einer Plugin-Datei verwendet. Wenn Sie die magische Konstante __FILE__ PHP anstelle des Parameters $plugin übergeben, wird der $path relativ zum übergeordneten Verzeichnis dieser Datei erstellt.

Jetzt verstehen wir also, dass wir die folgende Funktion verwenden müssen:

wp_register_script('jquery-ui.widget', plugins_url('assets/js/jquery-ui-1.9.2.widget.js', __FILE__ )); // without dirname( )

Damit dieser Code funktioniert, muss er sich in einer Datei im Stammverzeichnis des Plugins befinden. Daher ist es die beste Lösung, ihn in der Haupt-Plugin-Datei abzulegen. Der Grund ist einfach: __FILE__ PHP magic constant enthält immer den vollständigen Pfad der Datei, in die geschrieben ist , auch wenn diese Datei benötigt wird oder in einer anderen enthalten ist. Wenn Sie diesen Code in eine Datei einfügen, die sich in einem inneren Plugin-Verzeichnis befindet, funktioniert er für den Gültigkeitsbereich nicht.

Beachten Sie auch, dass 'assets/js/jquery-ui-1.9.2.widget.js' relativ zur Haupt-Plugin-Datei sein muss, sodass 'assets' ein Unterordner der ersten Ebene des Plugin-Stammverzeichnisses sein muss.

Hoffe, es hilft dir.

3
gmazzap