it-swarm.com.ru

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

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

Пример

path/wp-contents/plugins/myplugin

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

29
Cindy93

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

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

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

38
Philipp

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

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

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

echo  WP_PLUGIN_DIR.'/plugin-name';
13
Vivek Tamrakar

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

plugin_dir_path( __DIR__ ) . $path_inside_plugin_folder;

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

3
Jbro

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

За исключением плагинов 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;

}
2
Maciej Paprocki

Вот решение, когда вы не находитесь в корне плагина:

На данный момент с 4.7.5 , WordPress не имеет a get_plugins_root () функция, как есть get_theme_root () функция. Вероятно, это потому, что вам действительно не нужно изменять плагины из вашей темы, а корневой каталог плагинов никогда не меняется.

Тем не менее, это может быть полезно, если вам нужно программно влиять на плагины при разработке тем.

Просто, как WP делает для корня темы:

$plugin_root = WP_CONTENT_DIR . '/plugins';

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

Просто сделайте копию функции get_theme_root () from wp-includes/theme.php и вставьте ее в файл functions.php вашей темы, переименуйте функцию в get_plugins_root (), упростите ее и измените 'theme' to 'plugins' в функции ... 

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/";
1
i_a

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

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

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

plugin_dir_path( __DIR__ )
1
Rio Adetya Rizky

Как отмечено в разделе Common Usage из URL-адресов плагинов справочная страница функций, вот что сработало для меня:

Если вы используете функцию plugins_url () в файле, который вложен в подкаталог вашего каталога плагинов, вам следует использовать функцию PHP dirname ():

echo plugins_url('', dirname(__FILE__) );

Выход для этого был: 

http://domain/app/wp-content/plugins/my-plugin

Файл, который вызвал функцию, был моим functions.php внутри includes, поэтому полный путь к моему файлу был:

http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
1
Brosig

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

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

Вроде опоздал на эту вечеринку, но просто наткнулся на кое-что еще.

plugin_dir_path(__FILE__) всегда будет возвращать текущий путь (где находится файл, вызывающий его) Если вы хотите получить root, используйте код ниже

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'
0
decoder88

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

Надеюсь, это кому-нибудь поможет.

0
M07