将Wordpress Core包含在自己的脚本中

Den*_*nis 11 wordpress include

我正在尝试将Wordpress核心"导入"到自己的脚本中以使用wp_query等功能.我在子目录(自己的框架)中创建了一个脚本,并希望通过wordpress扩展它,但每次脚本抛出一个错误:

致命错误:在第333行的.../wordpress/wp-includes/taxonomy.php中的非对象上调用成员函数add_rewrite_tag()

例如(当我删除add_action('init','create_initial_taxonomies',0)时):

致命错误:在1006行的.../wordpress/wp-includes/post.php中的非对象上调用成员函数add_rewrite_tag()

非对象是$ wp_rewrite-object.我已经回应了一些东西,并发现第一个$ wp_rewrite是有效的,而且在下次调用时没有.我在WP核心文件上没有改变任何内容.

我试着通过调用来包含核心:

    require_once(BASE_PATH . 'wp-load.php');
Run Code Online (Sandbox Code Playgroud)

有人对我有什么想法吗?

谢谢

JL2*_*235 22

简短的回答,这样做:

define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require(BASE_PATH . 'wp-load.php');
Run Code Online (Sandbox Code Playgroud)

答案很长,使用PHP导入脚本是一个微妙的问题.

如果在所有函数之外定义局部变量,则可以使用"global"在函数内检索它.如果函数内部有局部变量,则以后不能使用global检索它,除非它被定义为全局变量.

脚本'wp-settings.php'就是问题所在.它包含在你的电话中,包括'wp-load.php'.

这里定义的变量没有说明是全球性的; 相反,这是假设的,因为脚本总是在任何函数之外运行,因此自动全局.即

$wordpress = 'foo';

function wordpressFunction() {
    global $wordpress;
}
Run Code Online (Sandbox Code Playgroud)

因为您要在函数中导入脚本,所以它们现在变为局部变量.你本质上是这样做的:

function myFramework() {
    $wordpress = 'foo';

    function wordpressFunction() {
        global $wordpress;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,修复是在导入脚本之前将它们定义为全局.现在可以正确找到$ wp_query和其他定义为全局的内容.