Wordpress获取插件目录

Cin*_*y93 34 wordpress wordpress-plugin

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

例子是

path/wp-contents/plugins/myplugin
Run Code Online (Sandbox Code Playgroud)

我试过plugin_dir_path(__FILE__)但返回当前的目录.

Phi*_*ipp 46

我建议使用WordPress内部常量来解决这种情况:

$my_plugin = WP_PLUGIN_DIR . '/my-plugin';

if ( is_dir( $my_plugin ) ) {
    // plugin directory found!
}
Run Code Online (Sandbox Code Playgroud)

替代

另一个有效的替代方法是从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';
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我的意见是:使用常量 WP_PLUGIN_DIR

  • 值得一提的是,`plugin_dir_path`这个名字很容易引起误解–根本与插件无关,它只是`trailingslashit`的包装,而后者会根据您提供的任何值运行`dirname()`。 (6认同)

Rik*_*esh 27

是的,根据plugin_dir_path的描述,它将为您提供当前的插件文件路径.但根据你在这里提出的问题,你可以做下面的事情,不幸的是没有直接的方式,

$plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/';
Run Code Online (Sandbox Code Playgroud)

  • 是的,这很糟糕; 你应该使用`WP_PLUGIN_DIR`代替. (9认同)
  • 这不是一个好例子:'wp-content'可以在WordPress安装上有任何名称,在这种情况下此代码将中断. (6认同)
  • 我个人喜欢WP_PLUGIN_DIR这个解决方案.它确实让它变得更好. (3认同)
  • @slikts per [WordPress' 文档](https://codex.wordpress.org/Determining_Plugin_and_Content_Directories):*这些不应该被插件或主题直接使用,但为了完整起见列在此处。*然后列出了一些常量,包括`WP_PLUGIN_DIR`。 (3认同)
  • 有没有不用手动指定插件文件夹的方法?类似于 plugin_url,但返回一个绝对路径而不是 url 路径。 (2认同)

小智 14

插件根路径代码

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

插件路径的代码

echo  WP_PLUGIN_DIR.'/plugin-name';
Run Code Online (Sandbox Code Playgroud)

  • 这仅在从位于插件目录基础的文件中调用时才提供插件目录。当您将 `__FILE__` 传递给它时,它只会检索当前文件的目录。 (4认同)

小智 11

这个派对有点晚了,但以防万一其他人偶然发现了这一点。

plugin_dir_path(__FILE__)将始终返回当前路径(调用它的文件所在的位置)。
如果您想要根,请使用以下代码:

plugin_dir_path( dirname( __FILE__ ) )
Run Code Online (Sandbox Code Playgroud)

然后你可以定义一个常量:

define( 'YOUR_PLUGIN_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
require_once YOUR_PLUGIN_DIR . 'includes/admin-page.php'
require_once YOUR_PLUGIN_DIR . 'admin/classes.php'
Run Code Online (Sandbox Code Playgroud)


She*_*man 7

plugins_dir_path()是用词不当。
它将始终返回当前文件的路径。

链接到代码:https :
//developer.wordpress.org/reference/functions/plugin_dir_path/#more-information

它是 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__) ) . '" > '; ?>

然后,您需要删除文件名以获取路径。或者使用``

回答:

这些解决方案与调用函数的文件所在的位置无关。如果您的文件位于 plugins 文件夹或其子目录中,则上述选项将起作用。否则,您将需要采取以下措施:

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 中默认可用,未在单站点安装中设置
// 可以在单站点安装中使用(照常:风险自担)
上传 //(如果设置,则上传文件夹,相对于 ABSPATH)(例如: /wp-内容/上传)


或者,如果您可以保证插件文件夹位于 WordPress 安装的正常位置,则无论您的文件(您想从中调用此函数的目录)在哪个目录中,i_a 上面的回答都将起作用。请参阅他在此线程中的更完整的帖子,但为了没有“仅链接答案”,我将在此处包括它本质上,它归结为使用以下内容(并将其转换为函数):

$plugins_root = WP_CONTENT_DIR . '/plugins';   
Run Code Online (Sandbox Code Playgroud)

或者 M07 的帖子,也在这个帖子里,在这里:https : //stackoverflow.com/a/28525164/5411817


M07*_*M07 6

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

您可以将这一行添加到文件中。

define( 'MYPLUGIN__PLUGIN_DIR_PATH', plugins_url( '', __FILE__ ) );
Run Code Online (Sandbox Code Playgroud)

之后您可以在插件中的任何位置使用新常量。

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

我希望它能帮助某人。

  • 很好的解决方案,将plugins_url更改为plugin_dir_path (2认同)

Bro*_*sig 5

正如插件 URLCommon Usage函数参考页面部分所述,这对我有用:

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

echo plugins_url('', dirname(__FILE__) );
Run Code Online (Sandbox Code Playgroud)

其输出是:

http://domain/app/wp-content/plugins/my-plugin
Run Code Online (Sandbox Code Playgroud)

调用该函数的文件是我的functions.phpinside includes,因此我的文件的完整路径是:

http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
Run Code Online (Sandbox Code Playgroud)