创建指向wp-blog-header.php的动态路径

时间:2012-08-09 作者:akamaozu

在依赖于Wordpress环境的外部脚本中创建了一个类。由于这是一个我打算在各种项目上使用的类,所以我决定动态创建一个指向wp blog header的路径。php,下面是我的想法。它目前对我有效,但我需要确保它万无一失。

$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\');
是否有人有更好的解决方案,或者无论脚本位置或WP安装设置如何,这个解决方案是否足够可靠?

4 个回复
SO网友:Tom J Nowell

在一般情况下,除了检查每个可公开访问的文件和文件夹,然后检查所有父文件夹之外,没有其他性能解决方案。

由于这不是对每个页面加载或请求执行的可行或可原谅的操作,因此您还有两个其他选项:

手动定义位置,这不是一个不合理的要求。对WordPress相对于您的文件的位置做出假设和期望。如果您想自动化事情,您将依赖后者。

我看到的代码问题:

假设WordPress位于同一个文件夹或2个以上的文件夹中,如果您同意这些假设,那么是的,您的代码可以安全使用

不过,我建议您将外部脚本作为插件滚动到WordPress中。

SO网友:Adam

根据法典,

http://codex.wordpress.org/Integrating_WordPress_with_Your_Website

<?php
require(\'/the/path/to/your/wp-blog-header.php\');
?>
你的手段和方法是否万无一失完全取决于你的设置和你放置脚本的位置,相对于你的WordPress安装。

假设您遵循代码中概述的约定,那么您应该可以。

您应该提供一个更详细的脚本位置示例(包括任何可能的变体),而不是WordPress的位置,因此如果有人要添加一些东西来优化您的代码,那么它就有意义了,因为您的代码片段将本地化到您的用例中。

更新(回应您的评论)

WordPress安装的路径是一个常量,因此,与其设计一些诡计来找出路径所在,不如按原样完整地说明它,就像上面的示例一样。

例如,如果您的实际路径(对于localhost)如下所示;

c:\\apache\\htdcos\\wordpress
。。。然后

//document root being c:\\apache\\htdocs

$_SERVER["DOCUMENT_ROOT"] . \'/wordpress/wp-blog-header.php\';
将找到您的文档根目录,然后为其指定安装目录和wp-blog-header.php 文件

然后我会放置一个.htaccess 文件位于c:\\apache\\htdocs 其中应包括以下内容:,

php_value auto_prepend_file "auto_inc.php" //the auto_inc.php can be a name of choice
这将包括(auto\\u prepend)文件auto_inc.php 在任何其他PHP文件之前,所以如果您有如下目录结构,

..\\htdocs\\ (root)
..\\htdocs\\project1\\
..\\htdocs\\project2\\
..\\htdocs\\project-test\\sample\\
..\\htdocs\\wordpress\\
..\\htdocs\\.htaccess
..\\htdocs\\auto_inc.php
..\\htdocs\\index.php
Theauto_inc.php 文件将包含在任何子目录中,无论深度如何。

现在,在这个自动包含的文件中,您可以放置一个函数来包装require(\'/the/path/to/your/wp-blog-header.php\'); 例如,您可以在各种项目中任意使用;

function wp_function_include() {

$path = require(\'/the/path/to/your/wp-blog-header.php\');

echo $path;

}

wp_functions_include(); //which fires the verbose require(path..wp-blog-header.php)
或者,您不需要包装require 让它在任何深度的每个文件、子目录中对您可用,而无需再次指定它,从而使您能够专注于您的项目。

视为/wordpress/ 目录已具有.htaccess 它本身不会受到.htaccess 在其根目录中找到,两次删除声明函数之间的任何冲突。

SO网友:Keshav Kalra

您只需应用以下代码即可获得wp-blog-header.php

$scriptPath = dirname(__FILE__);
$path = realpath($scriptPath . \'/./\');
$filepath = split("wp-content", $path);
// print_r($filepath);
define(\'WP_USE_THEMES\', false);
require(\'\'.$filepath[0].\'/wp-blog-header.php\');

SO网友:T.Todua

顺便说一句,如果您想包括worpdress核心(+主题功能),最好是用户:

require(\'/wp-load.php\');
而不是

require(\'/wp-blog-header.php\');

结束