web-dev-qa-db-fra.com

Quelle est la bonne façon de convertir le chemin absolu du script en cours d’exécution en URL, dans WordPress?

En un mot, ma question est "Comment convertir le chemin absolu du script d’exécution, par exemple,

/home/content/xx/xxxxxxxx/html/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN/MY_PLUGIN.PHP

ou

/home/content/xx/xxxxxxxx/html/wp-content/themes/MY_THEME/functions.php

à l'URL absolue? "

http://example.com/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN.PHP

ou

http://example.com/wp-content/themes/MY_THEME/functions.php

Je n'ai même pas besoin du nom de script, mais seulement du chemin d'accès au répertoire dans lequel il se trouve.

Contexte

J'ai créé une classe qui simplifie grandement la création d'une page d'options pour un plugin. Il ne fait pas (encore) la lourde tâche de s'inscrire/ajouter des options via l'API Settings, c'est plus une classe d'assistance qui

  • crée l'élément de menu (add_menu_page ou add_submenu_page)
  • crée un lien d'action de plugin dans la page de liste des plugins (plugin.php)
  • affiche une icône personnalisée dans le menu (s'il s'agit d'un élément de menu de niveau supérieur)
  • injecte des feuilles de style et/ou des fichiers javascript dans la tête - le chemin WP (register/en file d'attente)
  • quelques autres misc. choses liées à la création d'une page d'option

Il fait ces choses avec un nombre minimal d'options passées dans l'instanciation de la classe.

Problème

J'ai créé cette classe avec uniquement des plugins à l'esprit, mais je me suis rendu compte que cela fonctionnait aussi pour les thèmes ... sauf en ce qui concerne la génération d'URL à partir de références relatives. En ce moment, j'utilise

$my_url = plugins_url('/', __FILE__)

pour générer des URL pour les feuilles de style, les fichiers de script (.js) et le fichier d'icônes de menu associés à la page d'option uniquement si l'utilisateur entre un nom relatif URL S'ils entrent dans une URL absolue, je n'y touche pas. Exemple: si vous incluez 'icon_url' => 'images/my-icon.png' en tant qu’option, la classe le convertira en

http://example.com/wp-content/plugins/MY_PLUGIN_DIR/MY_PLUGIN/images/my-icon.png

Mais depuis que j'ai décidé de faire fonctionner ce cours aussi pour les thèmes, j'ai réalisé que je ne pouvais pas utiliser plugins_url. J'essaie d'éviter (si possible) d'empêcher l'utilisateur de spécifier si cette classe sera utilisée pour un plugin ou un thème.

Existe-t-il un moyen WordPress similaire à plugins_url() que je pourrais utiliser?

1
akTed

Appelez get_stylesheet_directory_uri () pour le thème actuel, ou get_template_directory_uri () pour le thème parent d'un thème enfant et ajoutez-y vos chemins de fichiers.

$url = get_stylesheet_directory_uri() . '/images/my-icon.png';
$url = get_template_directory_uri() . '/images/my-icon.png';

Edit: pour déterminer si vous êtes dans un plugin, un thème parent ou un thème enfant, comparez le dossier dans lequel vous vous trouvez (via dirname(__FILE__)) à plugin_dir_path () , get_template_directory () et get_stylesheet_directory () respectivement.

1
webaware

Dans votre fichier wp-config.php, à la toute fin, définissez ABSPATH comme étant le dossier racine wp. Vous pouvez alors remplacer cela depuis votre chemin de fichier par site_url (ou, si vous avez plutôt coché le chemin pour le répertoire theme/plugin/upload, puis la fonction URL appropriée listée sous https: // codex.wordpress.org/Function_Reference/plugin_dir_url#Related )

0
drzaus