有没有一个函数可以返回WordPress中我的插件的完整路径?
示例:
path/wp-contents/plugins/myplugin
我已经尝试了 plugin_dir_path(__FILE__)
,但返回的是当前目录。
有没有一个函数可以返回WordPress中我的插件的完整路径?
示例:
path/wp-contents/plugins/myplugin
我已经尝试了 plugin_dir_path(__FILE__)
,但返回的是当前目录。
我建议使用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
根据plugin_dir_path的描述,它将为您提供当前插件文件路径。但是,根据您在此提出的要求,您可以像下面这样做,不幸的是没有直接的方法:
$plugin_dir = ABSPATH . 'wp-content/plugins/plugin-folder/';
编辑:18-09-2021
最佳实践是使用以下代码与最新版本的WP_PLUGIN_DIR:
$plugin_dir = WP_PLUGIN_DIR . '/plugin-folder';
WP_PLUGIN_DIR
代替。 - slikts$dir = plugin_dir_path( __FILE__ );
// Example: /home/user/var/www/wordpress/wp-content/plugins/my-plugin/
插件路径代码
echo WP_PLUGIN_DIR.'/plugin-name';
__FILE__
传递给它时,它只是检索当前文件的目录。 - Carter Papeplugins_dir_path()
这个函数名不准确。
它将始终返回当前文件的路径。
代码库链接:
https://developer.wordpress.org/reference/functions/plugin_dir_path/#more-information
它是trailingslashit( dirname( $file ) );的包装器。
名称中的“插件”部分是误导性的 - 它可以用于任何文件,并且除非您在插件的基本目录中的文件中调用它,否则不会返回插件的目录。
实际上,它是trailingslashit()
函数的同义词。
IF当前文件位于plugins
目录中,then是的,该函数将返回当前文件的路径。
但是,如果您从任何其他目录的文件中调用此函数,则当前文件不在插件目录中,因此它将does NOT返回到插件目录的路径。它always返回当前文件的路径,但没有尾随斜杠。
这里的大多数答案都是不正确的,或者只有“有时”才是正确的。只有当您的文件恰好已位于插件目录中时,这些答案才能按照它们所说的那样工作!在所有其他情况下,它们将为您提供误导性的结果:当前文件的路径。
你的文件更可能在插件文件夹的*子目录*中。
如果是这种情况,此文档将向您展示如何创建到当前文件的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确实定义了常量,用于插件文件夹: Codex: 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)$plugins_root = WP_CONTENT_DIR . '/plugins';
或者 M07 在这个帖子中的回复,可以在这里找到:https://dev59.com/02Ii5IYBdhLWcg3w9wQU#28525164
虽然我来晚了,但如果有人看到这篇文章,请留意以下内容。
plugin_dir_path(__FILE__)
始终会返回当前路径(调用它的文件所在的位置)。
如果你想获取根目录,请使用以下代码:
plugin_dir_path( dirname( __FILE__ ) )
接着,您可以定义一个常量:
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'
您可以在主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/
}
我希望这能对某些人有所帮助。
如在插件Url函数参考页面的“常见用法”部分中所述,以下是我使用的方式:
如果您正在使用plugins_url()函数来访问嵌套在您的插件目录子目录中的文件,则应使用PHP的dirname()函数:
echo plugins_url('', dirname(__FILE__) );
http://domain/app/wp-content/plugins/my-plugin
调用该函数的文件是位于 includes
下的我的 functions.php
文件,因此我的文件的完整路径为:
http://domain/app/wp-content/plugins/my-plugin/includes/functions.php
plugins_url( 'images/logo.png' , dirname(__FILE__ ));
plugin_dir_path( __FILE__ )
将为您提供当前文件的插件路径。
这意味着,如果您在"your_plugin_dir/sub_dir/file.php"中调用此功能,将返回"your_plugin_dir/sub_dir/"
如果您想获取您的插件目录的根目录,请将__FILE__
更改为__DIR__
plugin_dir_path( __DIR__ )
__DIR__
只会向上移动一个目录,而不是将您带到根目录。 /wp-content/plugins/my-plugin/include/classes/
将变为 /wp-content/plugins/my-plugin/include/
。 - Aaronfunction 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;
}
plugin_dir_path
非常误导人,它实际上与插件并没有什么关系,它只是trailingslashit
的封装器,而后者只是在您提供的任何值上运行dirname()
。 - William Turrellplugins_url('myscript.js', __FILE__);
- gregbast1994