2010-06-27 3 views

ответ

32

Глядя на свой собственный ответ @Bog, я думаю, вы хотите;

$plugin_dir_path = dirname(__FILE__); 
+11

В PHP 5.3 вы можете использовать новую константу '__DIR__', которая обеспечивает одно и то же. – dave1010

+2

Ты почти там. Черт, вы даже назвали переменную такой же, как встроенная функция WordPress, которая делает то, что вы хотите. Будущий код вашего кода, используя рекомендованную функцию WordPress, выполняет то, что вы хотите. См. Мой ответ. –

+0

@TomAuger 'plugin_dir_path ($ file)' является просто оболочкой для 'trailingslashit (dirname ($ file))' - я бы сказал, что это больше не «будущее доказательство», чем мое; единственное различие - конечная косая черта. – TheDeadMedic

7

Чтобы получить плагин в каталоге вы можете использовать функцию Wordpress plugin_basename($file). Таким образом, вы будете использовать следующим образом извлечь папку и имя файла плагина:

$plugin_directory = plugin_basename(__FILE__); 

Вы можете совместить это с URL или путь сервера каталога плагинов. Для этого вы можете использовать константы WP_PLUGIN_URL, чтобы получить URL-адрес плагина или WP_PLUGIN_DIR, чтобы получить путь к серверу. Но так как Mark Jaquith, упомянутый в комментарии ниже, работает только в том случае, если плагины находятся в каталоге плагина Wordpress.

Подробнее об этом в Wordpress codex.

+0

это не ответ – bog

+3

Не используйте '' WP_PLUGIN_URL' или WP_PLUGIN_DIR' - плагин не может быть в директории плагинов. –

+0

Спасибо, я добавил его к моему ответу. – stefanglase

2

Попробуйте это:

function PluginUrl() { 

     //Try to use WP API if possible, introduced in WP 2.6 
     if (function_exists('plugins_url')) return trailingslashit(plugins_url(basename(dirname(__FILE__)))); 

     //Try to find manually... can't work if wp-content was renamed or is redirected 
     $path = dirname(__FILE__); 
     $path = str_replace("\\","/",$path); 
     $path = trailingslashit(get_bloginfo('wpurl')) . trailingslashit(substr($path,strpos($path,"wp-content/"))); 
     return $path; 
    } 

эхо PluginUrl(); вернет текущий URL-адрес плагина.

60

Почему бы не использовать основную функцию WordPress, разработанную специально для этой цели?

<?php plugin_dir_path(__FILE__); ?> 

См. Документацию Codex here.

Вы также

<?php plugin_dir_url(__FILE__); ?> 

если то, что вы ищете является URI, в отличие от пути сервера.

См. Документацию Codex here.

IMO всегда лучше использовать метод наивысшего уровня, доступный в ядре, и это все. Это делает ваш код более перспективным.

+4

Кроме того, если вы пытаетесь получить ресурс в местоположении, относящемся к этому каталогу плагина, используйте 'plugins_url ('images/image_inside_plugin_folder.png', __FILE__)' –

+3

Правильный ответ. WP_PLUGIN_URL не будет работать, если плагин используется как плагин MU (должен использовать), в то время как plugin_dir_path() и plugin_dir_url() будут. – Andy

+0

Спасибо за передачу кода codex. Я обнаружил, что __FILE__ сделал трюк для меня. – Ian

13

Это будет на самом деле получить результат, который вы хотите:

<?php plugin_dir_url(__FILE__); ?> 

http://codex.wordpress.org/Function_Reference/plugin_dir_url

+0

Это возвращает URL-адрес, а не путь к серверу. Хотя в некоторых случаях они удобны, на самом деле это не ответ на вопрос. – Luke

1

С WP 2.6.0 вы можете использовать метод plugins_url().

+0

Это возвращает URL-адрес, а не путь к файловой системе. – Flimm

+0

@Flimm, вы можете получить полный путь к файловой системе плагина: str_replace (site_url ('/'), ABSPATH, plugins_url()); –

1

Когда мне нужно, чтобы получить каталог, а не только для плагинов (plugin_dir_path), но более общий друг, вы можете использовать __DIR__, это даст вам путь к директории файла, в котором называется. Теперь вы можете использовать от functions.php или другой файл!

Описание:

Каталог файла. Если используется внутри include, то возвращается каталог . Это эквивалентно dirname (__FILE__). Это имя каталога не имеет завершающей косой черты , если это не корневой каталог. 1

Смежные вопросы