Как получить текущий каталог плагинов в WordPress?

Мне нужно получить текущий каталог плагинов, например

[wordpress_install_dir]/wp-content/plugins/plugin_name

(если getcwd() вызывается из плагина, он возвращает [wordpress_install_dir], корень установки)

Спасибо за помощь


person bog    schedule 27.06.2010    source источник


Ответы (10)


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

$plugin_dir_path = dirname(__FILE__);
person TheDeadMedic    schedule 28.06.2010
comment
В PHP 5.3 вы можете использовать новую константу __DIR__, которая делает то же самое. - person dave1010; 09.06.2011
comment
Ты почти там. Черт возьми, вы даже назвали переменную так же, как встроенную функцию WordPress, которая делает то, что вы хотите. Защитите свой код на будущее, используя рекомендуемую функцию WordPress, чтобы делать то, что вы хотите. Смотрите мой ответ. - person Tom Auger; 03.04.2012
comment
@TomAuger plugin_dir_path( $file ) - это просто оболочка для trailingslashit( dirname( $file ) ) - я бы сказал, что это не больше, чем у меня, для будущего; единственное отличие — косая черта в конце. - person TheDeadMedic; 04.04.2012
comment
Нет, это больше рассчитано на будущее, потому что, если основная команда по какой-либо причине решит изменить архитектуру или механику, они модифицируют функцию plugin_dir_path(), чтобы отразить это изменение, тогда как прямой вызов dirname( $file ) будет тогда мель. Если функция в ядре существует, используйте ее, даже если она кажется бессмысленной оболочкой. - person Tom Auger; 04.04.2012
comment
Не поймите меня неправильно, я понимаю, что это правильный путь WordPress. Но давайте проясним; единственная цель функции - вернуть абсолютный путь с косой чертой в конце к каталогу данного файла. Даже если он был изменен или изменена файловая система WP, ему все равно нужно будет вернуть эквивалент dirname( __FILE__ ) . '/'. Все остальное может поставить под угрозу функциональность любого плагина, использующего его. - person TheDeadMedic; 05.04.2012
comment
это допустимо только в том случае, если вызывающий его файл находится В корневом каталоге плагина. Если, например, у вас есть подпапки внутри плагина, и вы вызываете его из одной из этих папок, вы получите путь к этой подпапке! - person Dave Amphlett; 11.10.2013

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

<?php plugin_dir_path( __FILE__ ); ?>

См. документацию Кодекса здесь.

У вас также есть

<?php plugin_dir_url( __FILE__ ); ?>

если вы ищете URI, а не путь к серверу.

См. документацию Кодекса здесь.

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

person Tom Auger    schedule 13.10.2011
comment
Кроме того, если вы пытаетесь получить доступ к ресурсу в расположении относительно каталога этого плагина, используйте plugins_url( 'images/image_inside_plugin_folder.png' , __FILE__ ) - person Tom Auger; 31.10.2011
comment
Это правильный ответ. WP_PLUGIN_URL не будет работать, если плагин используется как MU (обязательное использование), в то время как plugin_dir_path() и plugin_dir_url() будут работать. - person Andy; 29.12.2011
comment
Спасибо за передачу документа кодекса. Я обнаружил, что FILE помог мне. - person Ian; 17.06.2012
comment
@Andy, если у вас есть mu-плагин и вы используете метод load.php, тогда plugin_dir_url() разрешается в wp-content/mu-plugin, а не в wp-content/mu-plugin/your-plugin-name, поэтому ваш комментарий только частично верно. - person Josh J; 26.08.2014
comment
Несмотря на название, plugin_dir_path не обязательно получает каталог плагина, он получает родительский каталог пути, переданного в качестве первого аргумента. Поэтому, если __FILE__ не находится в каталоге плагинов, plugin_dir_path( __FILE__ ) не вернет каталог плагинов. См. дополнительную информацию о plugin_dir_path. - person Flimm; 11.10.2017
comment
Я получаю запрещенный доступ при попытке использовать plugin_dir_url. - person Jovanni G; 27.04.2018

Это действительно даст желаемый результат:

<?php plugin_dir_url(__FILE__); ?>

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

person brenjt    schedule 21.02.2012
comment
Это возвращает URL-адрес, а не имя пути к серверу. Хотя в некоторых случаях это удобно, на самом деле это не ответ на вопрос. - person Luke; 09.03.2013
comment
пытался использовать это, но я получаю запрещенный доступ - person Jovanni G; 27.04.2018

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

$plugin_directory = plugin_basename(__FILE__); 

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

Подробнее об этом читайте в кодексе Wordpress.

person stefanglase    schedule 27.06.2010
comment
Не используйте WP_PLUGIN_URL или WP_PLUGIN_DIR — плагины могут отсутствовать в каталоге плагинов. - person Mark Jaquith; 20.08.2011
comment
Спасибо, я добавил это в свой ответ. - person stefanglase; 20.08.2011

$full_path = WP_PLUGIN_URL . '/'. str_replace( basename( __FILE__ ), "", plugin_basename(__FILE__) );
  • WP_PLUGIN_URL — адрес каталога плагинов.
  • WP_PLUGIN_DIR — путь сервера к каталогу плагинов

Эта ссылка может помочь: http://codex.wordpress.org/Determining_Plugin_and_Content_Directories.

person manish nautiyal    schedule 14.09.2011

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

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;
    }

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

person Pennywise83    schedule 01.07.2010

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

person Idham Perdameian    schedule 03.05.2014
comment
Это возвращает URL-адрес, а не путь к файловой системе. - person Flimm; 11.10.2017
comment
@Flimm, с помощью небольшой хитрости вы можете получить полный путь к файловой системе плагина: str_replace(site_url('/'), ABSPATH, plugins_url()); - person Idham Perdameian; 12.10.2017

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

Описание:

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

person Francisco Corrales Morales    schedule 10.09.2014

Если вы хотите получить текущий путь к каталогу в файле, для этого вы можете использовать магические константы __FILE__ и __DIR__ с функцией plugin_dir_path() как:

$dir_path = plugin_dir_path( __FILE__ );

Путь к текущему каталогу:

/home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/

__FILE__ магическая константа возвращает текущий путь к каталогу.

Если вы хотите подняться на один уровень выше текущего каталога. Вы должны использовать магическую константу __DIR__ как:

Текущий путь:

/home/user/var/www/wordpress_site/wp-content/plugins/custom-plugin/

$dir = plugin_dir_path( __DIR__ );

Путь на один уровень вверх:

 /home/user/var/www/wordpress_site/wp-content/plugins/

__DIR__ магическая константа возвращает путь к каталогу на один уровень выше.

person Gufran Hasan    schedule 24.04.2018

В основном файле PHP плагина это работает только в admin :

$plugin_data = get_plugin_data( __FILE__ );
$plugin_name = $plugin_data['Name'];
person Malki Mohamed    schedule 16.04.2021