URL-адрес плагина

В вопросе, который связан, но не такой, как: Как связать изображения с моим плагином, независимо от имени папки плагина

  • plugin-folder/plugin-main-file.php
  • plugin-folder/images/ содержащий все изображения
  • plugin-folder/classes/ содержащие определения классов
  • plugin-folder/classes/class1-files содержащие дополнительные файлы для класса 1
  • plugin-folder/classes/class2-files содержащие дополнительные файлы для класса 2
  • и т.д

Для доступа к изображениям я могу использовать относительную адресацию, такую ​​как plugins_url( '../images/image.png', dirname( __FILE__ ) ) но для этого требуется знание структуры файла и уровень жесткого кодирования, что приводит к потенциальных проблем обслуживания.

В качестве альтернативы, я могу определить глобальную константу (например) define('PLUGIN_ROOT', basename(dirname(__FILE__)) . '/' . basename(__FILE__)); в моем основном файле.

В идеале, есть функция WordPress, которая даст мне базовое имя плагина из любого места моего плагина (т. Е. Всегда return /plugin-folder/ ) … но я его не нашел. Есть ли такая битва?

– ИЗМЕНИТЬ ДОБАВИТЬ –

Я также знаю о plugins_url() без параметров … но это возвращает http://mydomain.ext/wp-content/plugins – то есть без моего имени плагина!

Solutions Collecting From Web of "URL-адрес плагина"

Я думаю, вы ищете plugin_dir_url :

 $url = plugin_dir_url(__FILE__); $imageurl = $url.'images/someimage.png'; 

EDIT : Извините, я неправильно понял вопрос … это только ответ на связанный вопрос. Вы можете проверить родительский каталог рекурсивно, пока не найдете правильный:

 function base_plugin_dir($dirpath) { if (substr(dirname($dir),-7) == 'plugins') {return $dirpath;} else {$dirpath = base_plugin_dir($dirpath);} return $dirpath; } function base_plugin_dir_url($filepath) { $baseplugindir = base_plugin_dir(dirname($filepath)); $url = plugin_dir_url(trailingslashit($baseplugindir)); return $url; } 

Затем вы можете получить URL-адрес, используя эту функцию из любого файла:

 $basepluginurl = base_plugin_dir_url(__FILE__); $imageurl = $basepluginurl.'/images/wordpress.png'; 

ИЛИ

Еще лучше установить константу из основного файла плагина, чтобы использовать ее позже:

 $url = plugin_dir_url(__FILE__); define('MY_UNIQUE_PLUGIN_URL',$url); 

Чтобы использовать в say /plugin/my-plugin/class/class1.php

 $imageurl = MY_UNIQUE_PLUGIN_URL.'/images/wordpress.png'; 

редактировать

Мой плохой, в таком случае я могу думать об этом.

 $x = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__)); 

Он должен вернуться

Http: // [URL-путь-к-плагинов] / [настраиваемого-плагин] /

Но прямолинейный класс, я не думаю, что WordPress имеет один


да

от https://codex.wordpress.org/Function_Reference/plugin_basename

 $x = plugin_basename( __FILE__ ); 

plugin_basename может быть тем, что вы хотите. Если ваш файл плагина находится в /wp-content/plugins/my-plugin/my-plugin.php это вернет:

 $file = plugin_basename( __FILE__ ); // "my-plugin/my-plugin.php" 

Если вы вызвали то же самое из подкаталога в своем плагине, например, /wp-content/plugins/my-plugin/inc/my-plugin-include.php он вернется:

 my-plugin/inc/my-plugin-include.php 

Если вам нужен текущий корневой каталог для плагина, тогда эта пользовательская функция должна выполнить трюк:

 /** * Current Plugin Directory * * Returns the root directory for current plugin */ function current_plugin_dir() { $basename = plugin_basename( __FILE__ ); return str_replace( __FILE__, '', $basename ); }