我应该使用什么来代替WP_CONTENT_DIR和WP_PLUGIN_DIR?

时间:2013-10-16 作者:Nick

WordPress文档Determining Plugin and Content Directories 声明:

WordPress在确定内容和插件目录的路径时使用以下常量。These should not be used directly by plugins or themes, 但出于完整性考虑,此处列出了。

接下来是列表WP_CONTENT_DIRWP_PLUGIN_DIR 在主题和插件开发人员不应使用的常量中,可能是因为以下原因:

WordPress允许用户将其wp内容目录放置在任何他们想要的地方,因此您绝不能假设插件将位于wp内容/插件中,或者上传将位于wp内容/上传中,或者主题将位于wp内容/主题中。

Mark Jaquith也comments here 不应使用这些常量:

不要使用WP\\u PLUGIN\\u URL或WP\\u PLUGIN\\u DIR-插件可能不在插件目录中。

So, what is the accepted way of referencing the full path to the plugins, wp-content, and themes folders without using these constants?

作为一个简单的示例,要输出所有已安装插件的完整路径,我可以这样做:

<?php
$plugins = get_plugins();

foreach ($plugins as $file => $details) {
    echo WP_PLUGIN_DIR . \'/\' . $file . \'<br>\';
}
生成如下列表:

/var/www/wp-content/plugins/akismet/akismet.php
/var/www/wp-content/plugins/debug-bar/debug-bar.php
/var/www/wp-content/plugins/hello.php
(例如,如果我正在编写一个插件,允许用户有选择地将插件归档为站点备份的一部分,我可能会这样做。)

如果使用WP_PLUGIN_DIR 如果错误,建议的替代方案是什么?没有等效于wp_upload_dir() 对于我可以找到的plugins、themes和wp content文件夹,这使得引用潜在的漫游主题和插件根目录成为问题。

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

引用当前路径中的文件或嵌套更深的文件,以引用当前路径

plugin_dir_path( __FILE__ )."further/nesting/here.css";
在中工作Plugins and Themes.

引用插件中的URl/URi要指向插件或主题文件,请使用

plugins_url( "path/to/file", __FILE__ );
它只适用于插件

中的引用URl/URiwp-admin 文件夹始终指向admin_url( \'some/path\' );. 有get_admin_url()

中的引用URl/Uriwp-includes 文件夹指向includes_url( \'some/path\' );

相对于网站主页的URl/URihome_url( \'etc\' );get_home_url() 为此。类似isget_site_url()site_url(). 那么也有network_home_url(). 你得到了network_admin_url()

wp-content 或者重命名的目录,您可以重新定义wp-content 文件夹名称。因此您使用content_url() 那里

如何获取插件文件夹url

如果使用WP\\u PLUGIN\\u DIR是错误的,建议的替代方案是什么?

简单使用plugins_url() 没有任何参数。

如果您将其用于插件,它也适用于MU插件。

EDIT #1 如果您对当前插件的路径感兴趣,请使用plugin_basename();.

EDIT #2 如果您对全方位的活动插件感兴趣,请使用wp_get_active_network_plugins();.

如果您不在multisite上,请使用wp_get_active_and_valid_plugins();. 这将考虑多站点/网络。请记住,如果您不在多站点上,但有sunrise.php 下降。

您还可以通过get_option( \'active_plugins\' );, 这是not recommended 因为它没有考虑过滤器和插件验证,这种情况经常发生。

进一步阅读此列表。查看上的搜索结果QueryPosts.com 了解更多信息。

This article 进入absolute depth 关于所有路径。

SO网友:Joe Rhoney

返回当前插件目录的服务器路径:

plugin_dir_path(__FILE__)

// example: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
参考号:https://codex.wordpress.org/Function_Reference/plugin_dir_path

不要混淆:

plugins_dir_path(__FILE__)
(注意复数“plugins“在那上面。)

既然你不想返回插件目录名,我们必须去掉它。下面是一个返回插件目录和文件名的函数:

plugin_basename(__FILE__)

// example: exampleplugin/exampleplugin.php
当然,我们也不想要插件的文件名,所以我们需要从plugin_basename(__FILE__) 第一要返回插件的文件名,请执行以下操作:

basename(__FILE__)

// example: exampleplugin.php
因此,要使用这些来构建指向插件目录的路径,我们可以使用str_replace() 功能如下:

$myBnm = basename(__FILE__); // value: exampleplugin.php
$myDir = plugin_basename(__FILE__); // value: exampleplugin/exampleplugin.php
$myStr = str_replace($myBnm,"",$myDir); // value: exampleplugin/
$myPth = plugin_dir_path(__FILE__); // value: /home/myserver/public_html/wordpress_install/wp-content/plugins/exampleplugin/
return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
如果需要,最后一行当然可以分配给变量,以便重复使用。

而不是:

return str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
使用类似以下内容:

$thePlgDir = str_replace($myStr,"",$myPth); // returns: /home/myserver/public_html/wordpress_install/wp-content/plugins/
然后,在需要时:

return $thePlgDir;

结束

相关推荐