Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress获取插件目录_Wordpress - Fatal编程技术网

Wordpress获取插件目录

Wordpress获取插件目录,wordpress,Wordpress,在WordPress中是否有任何函数可以返回我的插件的完整路径 例如 path/wp-contents/plugins/myplugin 我尝试了插件目录路径(\uu文件\uu),但返回了当前目录。是的,根据描述,它将为您提供当前插件文件路径。但根据你的要求,你可以做下面的事情不幸的是没有直接的方法 $plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/'; 正如@tsl143所提到的,函数是您想要的,还有\uuu文件\uuu魔法

在WordPress中是否有任何函数可以返回我的插件的完整路径

例如

path/wp-contents/plugins/myplugin

我尝试了
插件目录路径(\uu文件\uu)
,但返回了当前目录。

是的,根据描述,它将为您提供当前插件文件路径。但根据你的要求,你可以做下面的事情不幸的是没有直接的方法

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

正如@tsl143所提到的,函数是您想要的,还有
\uuu文件\uuu
魔法常量。如果您从插件文件夹中的文件调用它,它将引用该文件夹

例如:

对于目录: 对于插件目录中的文件或子目录:
您可以在主PHP文件中定义一个常量。它应该在插件文件夹的根目录下。 文件应该在这里:
../wp content/plugins/plugin folder/my plugin.php

您可以将此行添加到文件中

define( 'MYPLUGIN__PLUGIN_DIR_PATH', plugins_url( '', __FILE__ ) );
之后,您可以在插件中的任何位置使用新常量

public function Test() 
    {   
            $folder2 = MYPLUGIN__PLUGIN_DIR_PATH . '/folder1/folder2/';
           // $folder2 = .../wp-content/plugins/plugin-folder/folder1/folder2/
    }

我希望它能帮助一些人。

我建议使用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\u PLUGIN\u DIR

插件根路径的代码

插件路径代码


我建议使用以下代码。如果您是从任何子文件夹访问此函数

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

这次聚会有点晚了,但以防万一,其他人会发现这一点

plugin\u dir\u path(\uu FILE\uu)
将始终返回当前路径(调用它的文件所在的位置)。
如果需要根目录,请使用以下代码:

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'

当您不在插件根目录中时,这里有一个解决方案:

到目前为止,WordPress的4.7.5没有get\u plugins\u root()函数,就像有get\u theme\u root()函数一样。这可能是因为您真的不需要修改主题中的插件,而且插件根目录永远不会更改

但是,如果您需要在开发主题时以编程方式影响插件,那么它会很有用

简单地说,正如WP对主题根所做的那样:

$plugin_root = WP_CONTENT_DIR . '/plugins';
或者,如果你需要一个函数,为什么不像WordPress为主题根做的那样做呢

只需从wp includes/theme.php复制函数get_theme_root()并将其粘贴到主题的functions.php文件中,将函数重命名为get_plugins_root(),将其简化,并将函数中的“theme”更改为“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/";

我的解决方案是使用内部插件目录路径dir

plugin_dir_path( __DIR__ ) . $path_inside_plugin_folder;

上面应该给出服务器上插件文件夹的绝对路径,然后可以用插件文件夹中的任何文件加载变量。不幸的是,这里的大多数答案似乎忘记了一件重要的事情

除了plugins目录外,plugins还可能位于

因此,我们需要检查多个目录。
执行此操作的示例函数:

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;

}

正如函数参考页的
常用用法
一节所述,这正是我的工作原理:

如果在嵌套在插件目录子目录中的文件中使用plugins_url()函数,则应使用PHP的dirname()函数:

这方面的产出是:

http://domain/app/wp-content/plugins/my-plugin
调用函数的文件是my
functions.php
inside
includes
,因此我的文件的完整路径是:

http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
plugin\u dir\u path(\uu文件)
将为您提供当前文件的plugin路径

这意味着如果您像在“your\u plugin\u dir/sub\u dir/file.php”中那样调用此函数 将返回“您的插件目录/子目录/”

如果您想获取插件目录的根目录,只需将
\uuuuu文件
更改为
\uuuu目录

plugin_dir_path( __DIR__ )

你可以用这种方法获得它

plugin_dir_url( __DIR__ )

plugins\u dir\u path()
用词不当。
它将始终返回当前文件的路径

指向法典的链接:

它是trailingslashit(dirname($file));的包装器

名称中的“plugin”部分具有误导性——它可以用于任何文件,并且不会返回插件的目录,除非您在插件的基本目录中的文件中调用它

它实际上是
trailingslahit()
函数的同义词

如果当前文件位于
plugins
目录中,是,函数返回当前文件的路径。
但是,如果从任何其他目录中的文件调用此函数,则当前文件不在插件目录中,因此它不会返回到插件目录的路径。它总是返回当前文件的路径,但不带尾随斜杠

这里的大多数答案都不正确,或者只是“有时”正确。这些答案只有在您的文件恰好位于插件目录中时才会起作用!在所有其他情况下,它们会给您一个误导性的结果:当前文件的路径


您的文件更有可能位于plugins文件夹的*子目录*中

如果是这种情况,本法典将向您展示如何创建当前文件的URL:

如果在嵌套在插件目录子目录中的文件中使用plugins_url()函数,则应使用PHP的dirname()函数:

然后需要删除文件名才能获得路径。 或使用``

答复: 这些解决方案是indep
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;

}
echo plugins_url('', dirname(__FILE__) );
http://domain/app/wp-content/plugins/my-plugin
http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
plugin_dir_path( __DIR__ )
plugin_dir_url( __DIR__ )
$plugins_root = WP_CONTENT_DIR . '/plugins';   
function get_my_plugin_root_dir()
{
    // WP_PLUGIN_DIR will have something like "/home/michael/public_html/wp-content/plugins"
    // __DIR__ will have something like "/home/michael/public_html/wp-content/plugins/my-plugin-folder/the-dir-being-called-from
    
    // First, we remove WP's root plugin path from our __DIR__ path.
    $path_to_this_files_dir_without_wp_plugin_dir = str_replace(WP_PLUGIN_DIR, '', __DIR__);

    // Now, we're left with only our plugin's path, which looks like
    // this: "/my-plugin-folder/the-dir-being-called-from"

    // Next, we discard any sub-directories that are included with our
    // plugin's path and keep the first directory in the path, our 
    // plugin's directory name.
    $plugin_directory_name_only = explode(DIRECTORY_SEPARATOR, $path_to_this_files_dir_without_wp_plugin_dir)[1];

    // Now $plugin_directory_name_only has "my-plugin-folder"

    // Lastly, we build the plugin's complete root path using 
    // WP's root plugin directory and our plugin's root dir name.
    return WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $plugin_directory_name_only;
}
../wp-content/plugins/myplugin/myplugin.php
define( 'MYPLUGIN_PLUGIN_DIR_PATH', plugin_dir_path( __FILE__ ) );
echo MYPLUGIN_PLUGIN_DIR_PATH;
/home/example.com/public_html/wp-content/plugins/myplugin/