从外部服务器访问wpdb对象


Accessing wordpress DB object (wpdb) from an external server

提前为这个问题道歉。

我已经搜索了Google和StackOverflow,并且发现了很多方法可以在php页面上访问wpdb,当你在相同的服务器上时,但是似乎没有人能够从完全不同的服务器上调用它。

我试图在Piwik中创建一个插件,查询我们的多站点WP DB(托管在Piwik的单独服务器上)以获得帖子的总数。查询很容易,当你使用wpdb类(例如,$wpdb->get_results)…但是如果您尝试运行一个直接的SQL查询,就不那么容易了,因为您必须从60多个表中统计计数,因此我希望使用wpdb来获取所有有用的函数。

也就是说,如果设置了allow_url_include=1,使用require_once( 'http://www.example.com/wordpress/wp-load.php' ); (h/t to stormmyfrog)访问wpdb对象不是很安全。有别的办法可以绕过这个吗?

使用require_once( 'http://www.example.com/wordpress/wp-load.php' );不会从外部位置工作,即使你allow_url_include。您的服务器仍然解析php文件并发送解析后的php文件,该文件最终将完全空白。

你需要做的是创建一个API。你可能想要创建一个Wordpress插件,创建一个Piwik可以查询的新url来获得结果。

Wordpress服务器上的一个超级简单的api应该是这样的:

/api.php

<?php
// TODO add authentication, probably token-based
// TODO move this to a WP plugin
include ('wp-load.php');
// Get count of published posts
$count = array(
    'count' => wp_count_posts()->publish
);
echo json_encode($count);

PIWIK网站

<?php
$data = json_decode(file_get_contents('http://www.example.com/wordpress/api.php'));
echo $data->count;
// Result: number of published posts