gpt4 book ai didi

wordpress - 将 Wordpress Core 包含到自己的脚本中

转载 作者:行者123 更新时间:2023-12-04 01:35:25 25 4
gpt4 key购买 nike

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

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

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

fatal error :在第 1006 行的 .../wordpress/wp-includes/post.php 中的非对象上调用成员函数 add_rewrite_tag()

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

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

    require_once(BASE_PATH . 'wp-load.php');

有人对我有什么想法吗?

谢谢

最佳答案

简短的回答,这样做:

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

长答案,这是一个关于使用 PHP 导入脚本的微妙问题。

如果您在所有函数之外定义了一个局部变量,则可以使用“全局”在函数内部检索它。如果您在函数中有一个局部变量,则以后无法使用 global 检索它,除非它当时被定义为全局变量。

脚本“wp-settings.php”是问题所在。它是通过您调用包含“wp-load.php”来包含的。

在那里定义的变量没有被声明为是全局的;相反,这是假定的,因为脚本总是在任何函数之外运行,因此是自动全局的。 IE。
$wordpress = 'foo';

function wordpressFunction() {
global $wordpress;
}

因为您是在函数中导入脚本,所以它们现在成为局部变量。你本质上是在做:
function myFramework() {
$wordpress = 'foo';

function wordpressFunction() {
global $wordpress;
}
}

所以解决方法是在导入脚本之前自己将它们定义为全局。现在 $wp_query 和其他定义为全局的都正确找到了。

关于wordpress - 将 Wordpress Core 包含到自己的脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com