提前为这个问题道歉。
我已经搜索了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