0

所以我需要从我的主 WordPress 站点获取一些数据并在外部页面上使用它。

我的 WordPress 站点位于我的域的根目录下,而外部页面位于 /community/library/somethingelse/page.php 下

无论如何,我使用以下代码来访问该功能

<?php require('/path/to/my/wp-blog-header.php'); ?>

当我尝试访问时,使用它会给我以下错误page.php

This Plugin Requires WordPress 3.1+ or Greater: Activation Stopped!

如果有人对此有可能的解决方案,那就太好了!

从字面上看,没有任何答案可以满足这个问题。如果有人能弄清楚为什么会发生这种情况以及如何克服它,那就太好了。我仍然想使用 WordPress 功能,不想直接访问数据库。

4

1 回答 1

1

不久前我需要做同样的事情,如果不将大量“不必要的”文件包含到您的项目中,就很难绕过该警告。

我说“不必要”是因为您确实需要它们,但是仅仅将一些数据提取到您的应用程序就太过分了。

如果可能在您的环境中,我这样做的方式是直接查询数据库,例如,如果您需要访问帖子,然后查询wp_posts表。

如果您需要为每个用户提取帖子,那么您应该能够直接查询数据库。安全方面,您必须清理所有输出,例如htmlentities在 php.ini 中使用。

这是当前 PHP 版本的数据库架构(您的版本可能会有所不同)

http://codex.wordpress.org/File:WP3.0-ERD.png

就像是:

SELECT * FROM wp_posts WHERE post_author = 1

应该给你管理员用户写的所有帖子。

您可以包含 wp_config.php 以访问您的数据库凭据,然后以这种方式使用 PDO(或 mysqli)连接到您的数据库:

require('path/to/wp_config.php');
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$sql = "SELECT post_date, post_title, post_content FROM wp_posts WHERE post_author = ?";
$statement = $mysqli->prepare($sql);
$statement->bind_params("i", $user_id);
$statement->bind_result($post_date, $post_title, $post_content);
$user_id = 1;
$statement->execute();
while($statement->fetch() {
    echo "{$post_date}\n{$post_title}\n{$post_content}";
}
$statement->close();
$mysqli->close();

如果您之前没有使用过 mysqli,您可以在以下两个链接中了解更多信息:

http://www.php.net/manual/en/mysqli.quickstart.connections.php

http://www.php.net/manual/en/mysqli-stmt.fetch.php

此外,有些帖子可能包含 bb 标签、富文本和 Wordpress 为您处理的一堆其他不同的东西,但如果您直接查询数据库,您将不得不将 HTML 标签(如 h1)列入白名单,甚至编写一个BB 代码解析器。

一个不错的选择是创建一个空白的 Wordpress 模板,然后通过 iframe 将其包含在您的应用程序中。

但是,要实现这一目标,您可能必须使用相同的数据库配置创建一个 wordpress 博客的副本,以便在同一个博客上拥有两个处于活动状态的模板。“空白”模板将从用户视图中隐藏。

另一种选择是编写一个 RSS 阅读器,但我不确定是否可以为每个用户获取 RSS 提要。

于 2013-07-12T04:43:15.823 回答