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和其他定义为全局的内容.
| 归档时间: |
|
| 查看次数: |
11911 次 |
| 最近记录: |