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

时间:2012-02-01 18:53:44

标签: wordpress include

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

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

例如(当我删除add_action时(&#39; init&#39;,&#39; create_initial_taxonomies&#39;,0)):

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

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

我尝试通过调用

来包含核心
    require_once(BASE_PATH . 'wp-load.php');

有人对我有什么想法吗?

感谢

3 个答案:

答案 0 :(得分:22)

简短回答,做到这一点:

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”在函数内检索它。如果函数内部有局部变量,则以后不能使用global检索它,除非它被定义为全局变量。

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

那里定义的变量 not 表示为全局变量;相反,这是假定的,因为脚本总是在任何函数之外运行,因此自动全局。即。

$wordpress = 'foo';

function wordpressFunction() {
    global $wordpress;
}

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

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

    function wordpressFunction() {
        global $wordpress;
    }
}

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

答案 1 :(得分:2)

访问wordpress编程的所有内容的最简单方法是使用以下内容:

require_once('/../../../wp-blog-header.php'); // Use actual root path to wp-blog-header.php
header("HTTP/1.0 200 OK");

使用上面的代码,您将获得使用WordPress中的模板通常可以获得的所有功能。我已经尝试了上面列出的所有其他方法,这个方法是迄今为止最好的方法。

答案 2 :(得分:1)

我有同样的错误。我想得到一些文章和永久链接。这有助于:

global $wpdb, $wp_rewrite;
require '/(...)/wp-config.php';

$result = $wpdb->get_results( $wpdb->prepare( ... ) );
foreach( $result as &$item )
  $item->link = get_permalink( $item->ID );

我还发现这在另一个案例中很有用: http://www.stormyfrog.com/using-wpdb-outside-wordpress/