Есть ли какая-либо функция, которая вернет полный путь моего плагина в WordPress?
Пример
path/wp-contents/plugins/myplugin
Я пробовал plugin_dir_path(__FILE__)
, но возвращает текущий каталог.
Есть ли какая-либо функция, которая вернет полный путь моего плагина в WordPress?
Пример
path/wp-contents/plugins/myplugin
Я пробовал plugin_dir_path(__FILE__)
, но возвращает текущий каталог.
Да, согласно описанию plugin_dir_path он даст вам текущий путь к файлу плагина. Но согласно тому, что вы просите здесь, вы можете сделать что-то вроде ниже, к сожалению, нет прямого пути,
$plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/';
Я бы предложил использовать внутреннюю константу WordPress для решения этого случая:
$my_plugin = WP_PLUGIN_DIR . '/my-plugin';
if ( is_dir( $my_plugin ) ) {
// plugin directory found!
}
Альтернативный
Другой действующей альтернативой является вычисление пути от более сложного/запутанного URL-адреса. Я бы не использовал этот код:
$plugins_url = plugins_url();
$base_url = get_option( 'siteurl' );
$plugins_dir = str_replace( $base_url, ABSPATH, $plugins_url );
// Now $plugins_dir is same as the WP_PLUGIN_DIR constant.
$my_plugin = $plugins_dir . '/my-plugin';
Мое мнение в этом случае: Используйте константу WP_PLUGIN_DIR
Код для корневого пути плагина
$dir = plugin_dir_path( __FILE__ );
// Example: /home/user/var/www/wordpress/wp-content/plugins/my-plugin/
Код для пути плагинов
echo WP_PLUGIN_DIR.'/plugin-name';
Моим решением было использовать внутри plugin_dir_path DIR
plugin_dir_path( __DIR__ ) . $path_inside_plugin_folder;
Вышеупомянутый должен предоставить вам абсолютный путь к вашей папке плагина на сервере, после чего вы можете загрузить свою переменную с любым файлом в вашей папке плагинов
plugin_dir_path( __FILE__ )
даст вам путь к плагину текущего файла.
это значит, что если вы вызовете эту функцию, как внутри "your_plugin_dir/sub_dir/file.php", то вернете "your_plugin_dir/sub_dir/"
если вы хотите получить в корневом каталоге вашего каталога плагинов, просто измените __FILE__
на __DIR__
plugin_dir_path( __DIR__ )
Вот решение, когда вы не внутри корня плагина:
На данный момент с 4.7.5 WordPress не имеет функции get_plugins_root(), например, существует get_theme_root ( ). Вероятно, это связано с тем, что вам действительно не нужно изменять плагины из вашей темы, а корневой каталог плагинов никогда не изменяется.
Однако, это может быть полезно, если вам необходимо программно влиять на плагины при разработке тем.
Просто, поскольку WP делает для корня темы:
$plugin_root = WP_CONTENT_DIR . '/plugins';
Или, если вам нужна функция, почему бы просто не сделать это так же, как это делает WordPress для корня темы?
Просто создайте копию функции get_theme_root() из wp-includes/theme.php и вставьте ее в свой файл functions.php темы, переименуйте функцию в get_plugins_root(), упростить его и изменить "тему" на "плагины" в функции...
get_plugins_root() {
$plugins_root = WP_CONTENT_DIR . '/plugins';
/**
* Filters the absolute path to the plugins directory.
*
* @since now
*
* @param string $plugins_root Absolute path to plugins directory.
*/
return apply_filters( 'plugins_root', $plugins_root );
}
С помощью пути вы можете теперь добавить имя папки плагинов, на которое вы хотите повлиять.
$the_plugin_root = get_plugins_root()."/the-plugin-name/";
К сожалению, большинство ответов здесь, похоже, забывают о важной вещи.
Кроме плагинов dir, плагины могут также находиться в должны использовать плагины dir
Из-за этого нам нужно проверить несколько каталогов. Пример функции
function get_plugin_dir_path($pluginFolderName){
if ( defined( 'WPMU_PLUGIN_DIR' ) && file_exists( trailingslashit( WPMU_PLUGIN_DIR ) . $pluginFolderName ) ) {
return trailingslashit( WPMU_PLUGIN_DIR ) . $pluginFolderName;
} elseif ( defined( 'WP_PLUGIN_DIR' ) && file_exists( trailingslashit( WP_PLUGIN_DIR ) . $pluginFolderName ) ) {
return trailingslashit( WP_PLUGIN_DIR ) . $pluginFolderName;
}
return false;
}
Как отмечалось в разделе " Common Usage
плагинов" на странице справки по функциям URL, вот что сработало для меня:
Если вы используете функцию plugins_url() в файле, который вложен в подкаталог вашего каталога плагинов, вам следует использовать функцию PHP dirname():
echo plugins_url('', dirname(__FILE__) );
Выход для этого был:
http://domain/app/wp-content/plugins/my-plugin
Файл, который называется функция была моя functions.php
внутри includes
в includes
, таким образом, полный путь к файлу был мой:
http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
Вы можете определить переменную в своем основном файле Php. Он должен быть в корне вашей папки плагина. Файл должен быть здесь:.../wp-content/plugins/plugin-folder/my-plugin.php
Вы можете добавить в файл эту строку.
define( 'MYPLUGIN__PLUGIN_URL', plugins_url('', __FILE__ ) );
После того, как вы сможете использовать новую переменную где угодно в своем плагине.
public function Test()
{
$folder2 = MYPLUGIN__PLUGIN_URL . '/folder1/folder2/';
// $folder2 = .../wp-content/plugins/plugin-folder/folder1/folder2/
}
Я надеюсь, что это поможет кому-то.
Я предлагаю следующий код. если вы получаете доступ к этой функции из любой подпапки.
plugins_url( 'images/logo.png' , dirname(__FILE__ ));
Поздно поздно, но просто заставляйте кого-то еще спотыкаться над этим.
plugin_dir_path(__FILE__)
Всегда будет возвращать текущий путь (где находится его имя)
Если вы хотите, чтобы корень использовал код ниже
plugin_dir_path( dirname( __FILE__ ) )
Затем вы можете определить константу
define( 'YOUR_PLUGIN_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
require_once YOUR_PLUGIN_PATH . 'includes/admin-page.php'
require_once YOUR_PLUGIN_PATH . 'admin/classes.php'
plugins_dir_path()
неверно.
Он всегда будет возвращать путь к текущему файлу.
Ссылка на кодекс:
https://developer.wordpress.org/reference/functions/plugin_dir_path/#more-information
It is a wrapper for trailingslashit( dirname( $file ) );.
Часть имени "плагина" вводит в заблуждение - его можно использовать для любого файла, и он не будет возвращать каталог плагина, если вы не вызовете его внутри файла в базовом каталоге плагинов.
На самом деле это синоним функции trailingslashit()
.
ЕСЛИ текущий файл находится в каталоге plugins
, тогда да, функция возвращает путь к текущему файлу.
Однако, если вы вызываете эту функцию из файла в любом другом каталоге, то текущий файл не находится в каталоге плагинов, и, следовательно, он НЕ возвращает путь к каталогу плагинов. Он всегда возвращает путь к текущему файлу, но без косой черты.
Большинство ответов здесь неверны или только "иногда" верны. Эти ответы будут работать только так, как они говорят, если ваш файл уже находится в каталоге плагинов! Во всех остальных случаях они дадут вам вводящий в заблуждение результат: путь к вашему текущему файлу.
Скорее всего, ваш файл находится в * подкаталоге * папки плагинов.
Если это так, этот кодекс показывает вам, как создать URL для текущего файла: https://codex.wordpress.org/Function_Reference/plugins_url
Если вы используете функцию plugins_url() в файле, который вложен в подкаталог вашего каталога плагинов, вам следует использовать функцию PHP dirname():
<?php echo '<img src="' . plugins_url( 'images/wordpress.png', dirname(__FILE__) ) . '" > '; ?>
Затем вам нужно будет удалить имя файла, чтобы получить путь. Или используйте ''
Эти решения не зависят от того, где находится файл вашей вызывающей функции. Если ваш файл находится в папке плагинов или в ее подкаталоге, то вышеуказанные параметры будут работать. В противном случае вам придется прибегнуть к чему-то вроде:
WP_PLUGIN_DIR
WordPress определил константу для папки плагинов:
Кодекс: https://codex.wordpress.org/Determining_Plugin_and_Content_Directories
Константы
WordPress использует следующие константы при определении пути к каталогам содержимого и плагинов. Они не должны использоваться непосредственно плагинами или темами, но перечислены здесь для полноты.
WP_CONTENT_DIR//без косой черты, только полные пути
WP_CONTENT_URL//полный URL
WP_PLUGIN_DIR//полный путь, без косой черты
WP_PLUGIN_URL//полный URL, без косой черты// Доступно по умолчанию в MS, не устанавливается при установке на одном сайте
//Может использоваться при установке на одном сайте (как обычно: на свой страх и риск)
UPLOADS//(если установлено, загружает папку относительно ABSPATH) (например,: /wp-content/uploads)
Или, если вы можете гарантировать, что папка плагинов находится в обычном месте для установки WordPress, ответ i_a выше выше будет работать независимо от того, из какого каталога ваш файл (из которого вы хотите вызвать эту функцию ) в. Пожалуйста, смотрите его более полный пост в этой теме, но чтобы не иметь "ответа только по ссылке", я добавлю сюда, что по сути, он сводится к использованию следующего (и превращению его в функцию):
$plugins_root = WP_CONTENT_DIR . '/plugins';
Или сообщение M07, также в этой теме, здесь: fooobar.com/questions/262725/...
Как упоминалось в @tsl143, функция plugins_url()
- это то, что вы хотите, вместе с магической константой __FILE__
. Если вы вызываете его из файла внутри вашей папки плагина, он будет ссылаться на эту папку.
Пример:
echo plugins_url( '' , __FILE__ );
//outputs: http://www.example.com/wp-content/plugins/my-plugin
echo plugins_url( 'images/logo.png' , __FILE__ );
//outputs: http://www.example.com/wp-content/plugins/my-plugin/images/logo.png
Вы можете получить его с помощью этого метода
plugin_dir_url( __DIR__ )
Обратитесь к этому
http://codex.wordpress.org/Function_Reference/plugins_url
чтобы избежать указания вручную