web-dev-qa-db-fra.com

la fonction plugins_url mélange le chemin du système et l'URL

Dans mon widget WordPress, j'utilise le code suivant:

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

Malheureusement, le code me donne une URL non valide qui est mélangée à mon chemin système:

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

Est-ce que ce problème est peut-être lié au fait que j'ai une installation WordPress locale s'exécutant sur un ordinateur Windows (avec Apache 2)?

1
Benny Neugebauer

Réponse courte

  1. jquery-ui.widget est l'un des scripts standard déjà inclus et enregistrés dans WP. Vous n'avez pas besoin de l'enregistrer, il vous suffit de mettre en file d'attente.
  2. Dans votre code, ce qui ne va pas, c'est la fonction dirname dans plugin_url. Laissez seulement __FILE__ comme second argument de plugins_url

Réponse longue: Plus d'infos

jquery-ui.widget est l’un des scripts wordpress standard , de sorte que, dans la plupart des cas, vous n’avez pas besoin d’utiliser un fichier que vous avez chargé vous-même. mais juste en utilisant la copie dans l'installation de wp.

Dans ce cas, vous n'avez pas besoin d'enregistrer le script, car il est déjà enregistré. Vous n'avez qu'à mettre en file d'attente à l'aide de wp_enqueue_script('jquery-ui-widget').

Ceci mettra correctement en file d'attente la version du script fournie avec Wordpress. Dans la version actuelle de WP (3.6), le "widget jqueri-ui" est dans la version "1.10.3".

Avez-vous un problème avec cette version? Essayez de les résoudre ... aussi parce qu'inclure votre ancienne version ne garantit pas que vous n'aurez pas de problèmes: si un autre plugin ou thème inclut WP version du même script, je vous laisse le plaisir d'imaginer ce qui se passe.

Si nous oublions que vous essayez d'inclure l'un des WP scripts standard, le problème rencontré par votre code se situe dans la fonction plugins_url.

Doc pour le deuxième argument de plugins_url dans le codex n'est pas le plus clair que j'ai jamais vu:

$plugin - Chemin sous le répertoire plugins du répertoire parent auquel vous souhaitez que le chemin $ soit relatif.

N'est pas assez clair si nous devons passer chemin du répertoire (comme vous le faites) ou le chemin complet (avec le nom du fichier).

Mais plusieurs lignes ci-dessous dans la même page de codex, nous lisons: La fonction plugins_url() est couramment utilisée dans un fichier plugin. Le passage de la constante __FILE__ PHP à la place du paramètre $plugin rend la $path relative au répertoire parent de ce fichier

Donc, maintenant nous comprenons que nous devons utiliser une fonction comme ceci:

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

Mais notez que pour que ce code fonctionne, il doit être dans un fichier situé dans le répertoire racine du plugin, la meilleure solution est donc de le placer dans le fichier de plugin principal. La raison est simple: __FILE__ PHP constante magique contient toujours le chemin complet du fichier dans lequel est écrit , même si ce fichier est requis ou inclus dans un autre. Donc, si vous placez ce code dans un fichier placé dans un répertoire de plugin interne , cela ne fonctionne pas pour l'étendue.

Notez également que 'assets/js/jquery-ui-1.9.2.widget.js' doit être relatif au fichier de plugin principal. Par conséquent, 'assets' doit être un sous-dossier de premier niveau de la racine du plug-in.

J'espère que ça vous aide.

3
gmazzap