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