Подтвердить что ты не робот

Wordpress получить каталог плагинов

Есть ли какая-либо функция, которая вернет полный путь моего плагина в WordPress?

Пример

path/wp-contents/plugins/myplugin

Я пробовал plugin_dir_path(__FILE__), но возвращает текущий каталог.

4b9b3361

Ответ 1

Да, согласно описанию plugin_dir_path он даст вам текущий путь к файлу плагина. Но согласно тому, что вы просите здесь, вы можете сделать что-то вроде ниже, к сожалению, нет прямого пути,

$plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/';

Ответ 2

Я бы предложил использовать внутреннюю константу 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

Ответ 3

Код для корневого пути плагина

$dir = plugin_dir_path( __FILE__ );
// Example: /home/user/var/www/wordpress/wp-content/plugins/my-plugin/

Код для пути плагинов

echo  WP_PLUGIN_DIR.'/plugin-name';

Ответ 4

Моим решением было использовать внутри plugin_dir_path DIR

plugin_dir_path( __DIR__ ) . $path_inside_plugin_folder;

Вышеупомянутый должен предоставить вам абсолютный путь к вашей папке плагина на сервере, после чего вы можете загрузить свою переменную с любым файлом в вашей папке плагинов

Ответ 5

plugin_dir_path( __FILE__ ) даст вам путь к плагину текущего файла.

это значит, что если вы вызовете эту функцию, как внутри "your_plugin_dir/sub_dir/file.php", то вернете "your_plugin_dir/sub_dir/"

если вы хотите получить в корневом каталоге вашего каталога плагинов, просто измените __FILE__ на __DIR__

plugin_dir_path( __DIR__ )

Ответ 6

Вот решение, когда вы не внутри корня плагина:

На данный момент с 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/";

Ответ 7

К сожалению, большинство ответов здесь, похоже, забывают о важной вещи.

Кроме плагинов 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;

}

Ответ 8

Как отмечалось в разделе " 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

Ответ 9

Вы можете определить переменную в своем основном файле 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/
    }

Я надеюсь, что это поможет кому-то.

Ответ 10

Я предлагаю следующий код. если вы получаете доступ к этой функции из любой подпапки.

plugins_url( 'images/logo.png' , dirname(__FILE__ ));

Ответ 11

Поздно поздно, но просто заставляйте кого-то еще спотыкаться над этим.

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'

Ответ 12

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/...

Ответ 13

Как упоминалось в @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    

Ответ 14

Вы можете получить его с помощью этого метода

plugin_dir_url( __DIR__ )