5

有没有办法获得安装 WordPress 的路径?

我正在使用以下内容:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

www.example.com -> /usr/local/pem/vhosts/165312/webspace/httpdocs

这对于 www.example.com/blog 来说并不好,因为我需要对文件夹名称(博客)进行硬编码。

后来我找到了一种方法:

$iroot = getcwd();
$folder = explode("/", $iroot);
$dir = $folder[8]; // I know is 8
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
require "$root/$dir/wp-blog-header.php";

但它仍然是很多复杂的东西。有没有一种简单的方法可以在没有硬编码的情况下获取 WordPress 的安装位置(路径)?

注意:1 WordPress 功能将不起作用,因为这在 WordPress 之外。如上一个示例所述,确定 WordPress 安装路径的重点在于require "wp-blog-header.php";多个 WordPress 安装,其中每个安装使用不同的文件夹(example.com/blog-one 和 example.com/blog-two),而不是 WordPress MU或多站点。

注意:2如果不是require "$root/$dir/wp-blog-header.php";我使用require "wp-blog-header.php";它,只要文件在同一个文件夹中,它就可以工作,但在我的情况下,文件有时会在不同的文件夹中。

4

8 回答 8

8

使用 ABSPATH 常量:

<?php echo ABSPATH ?>

这应该打印您的 WordPress 路径。

于 2012-06-08T22:17:54.920 回答
3

这就是我正在做的事情:

设置

$docRoot = $_SERVER['DOCUMENT_ROOT'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$queryArray = explode("/", $scriptName);
$queryLength = count($queryArray);

用法

require_once($docRoot . ($queryLength > 2 ? "/".$queryArray[$queryLength - 2] : "" ) . '/wp-blog-header.php');

无论脚本在哪里,这对我来说都非常适合实例化 WordPress 环境。在使用任何$_SERVER变量之前肯定需要进行清理(并且我需要在我的 localhost 环境之外对其进行三次检查),但我认为它不需要进行严格的修改才能成为一个实用的通用解决方案。

于 2012-08-09T20:39:16.460 回答
2

如果您要尝试的只是被调用文件所在的当前目录,那么我将使用:

realpath(dirname(__FILE__))

这在很大程度上取决于文件所在的位置。如果它与 WordPress 安装在同一目录中,那么它将类似于:

<?php
    $root = realpath(dirname(__FILE__));
    require "$root/wp-blog-header.php";
?>
于 2012-06-10T02:28:13.210 回答
2

根示例:

  • /usr/local/pem/vhosts/165312/webspace/httpdocs/blog-one
  • /usr/local/pem/vhosts/165312/webspace/httpdocs/blog-two
  • /usr/local/pem/vhosts/165312/webspace/httpdocs/some-blog

下面的示例适用于任何博客(“blog-one”、“blog-two”和“some-blog”),并且脚本或文件可以安装在博客的任何子文件夹中。

$current_path = getcwd(); // Get the current path to where the file is located
$folder = explode("/", $current_path); // Divide the path in parts (aka folders)
$blog = $folder[8]; // The blog's folder is the number 8 on the path

// $root = path without the blog installation folder.
$root = realpath($_SERVER["DOCUMENT_ROOT"]);

// Now I can require any WordPress file
require "$root/$dir/wp-blog-header.php";

// For the current installation
// For example, wp-blog-header.php to get the blog name or
// wp-config.php to access the database.

这使得脚本独立。该脚本适用于任何 WordPress 安装安装中的任何文件夹,只要该文件夹的编号为 8。如果安装在子文件夹中,则必须增加编号 8。还要记住,当前路径可能有更多或更少的文件夹,这意味着必须相应地调整脚本。

注意:这将通过“硬编码”路径上的文件夹位置来工作,只要所有安装的位置相同,脚本就可以工作。另一种方法是硬编码。

于 2012-06-13T15:38:16.870 回答
2

这是从 WordPress中执行此操作的方法(这不是提问者所要求的,但我怀疑很多人会搜索...)

有一个专用函数get_home_path(),它会给你类似的东西:

/srv/www/my-site/htdocs/

文件和内容目录(以及 Web 路径)的其他功能。

于 2014-12-03T21:14:18.170 回答
1

如果你可以到达数据库,你需要做

update_option('wp_dir',dirname(__FILE__));

在文件 wp-blog-header.php 中。

然后从任何应用程序连接到数据库并使用以下查询检索路径:

select option_value from wp_options where option_name ='wp_dir';

当然,您需要知道数据库名称和 WordPress 表前缀。

PS:这可能是也可能不是您的解决方案,但它是其中一种方式。

于 2012-06-13T13:14:15.640 回答
0

为什么不简单地在 wp-config.php 中执行以下操作:

$WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -1)));

例如

$WP_PATH = implode("/", (explode("/", "/one/two/three/index.php", -1)));

将返回 "/one/two/three" 和

$WP_PATH = implode("/", (explode("/", "/index.php", -1)));

将返回 ””

于 2013-03-15T03:11:03.190 回答
0
$WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -4)));

将为您提供确切的 WordPress 根目录。

例如,您的根地址是 www.myroot.com,而您的 WordPress 站点位于 public_html 的 WordPress 文件夹中,那么 wwww.myroot.com/wordpress/ 将是 $WP_PATH 中的结果。在这种情况下,您当前的文件名应该在您的插件根目录中。就像 some_plugin 是我的插件名称。所以完整路径将变为:

localhot/wordpress/wp_content/plugins/some_plugin/

是我localhot/wordpress/wp_content/plugins/some_plugin/myfile.php写这个脚本的文件名,会给我/wordpress. 这对我有用,因为我想要我的 wordpress 目录名称。所以寻找这样的内容:

$WP_PATH = implode("/", (explode("/", $_SERVER["PHP_SELF"], -4)));
require_once( $_SERVER['DOCUMENT_ROOT'].$WP_PATH '/wp-load.php');
于 2015-04-04T19:40:31.903 回答