让我为我最初提出的关于你动机的问题道歉。我看到了很多“如何远程检索其他博客的所有帖子”的问题,并立即假设存在恶意意图,因为10次中有9次是这样的。这就是说,你的目的似乎很直截了当,令人尊敬。
目前,无法“分块”您提到的三个请求中的任何一个的XML返回。今天早上我起床的时候,我看到你proposed this as a feature enhancement through Trac. 这肯定不会进入Wordpress 3.1,所以在提交的补丁进入core之前,您可能需要等待几个月(或更长时间)。但这是一个良好的开端。
同时,请记住XML-RPC API是可扩展的。虽然在现有API中无法接收“块”,但您始终可以添加自己的方法。这实际上是在core中获取补丁的最佳方法-创建自己的方法,确保它有效,然后将补丁提交回Trac。
我猜你的方法与metaWeblog.getRecentPosts
, 但名字会更好一点。。。可能wp.getPagedPosts
. 您可以接受所有相同的参数,但添加一个:“pagenumber”。通过这种方式,您可以将请求设置为一次返回50篇文章,并逐步遍历收集。
要添加方法,请将xmlrpc_methods
过滤器:
function xml_add_method( $methods ) {
$methods[\'wp.getPagedPosts\'] = \'wp_getPagedPosts\';
return $methods;
}
add_filter( \'xmlrpc_methods\', \'xml_add_method\');
然后添加回调函数:
function wp_getPagedPosts($args) {
// $this->escape($args); //<-- This is called by native XML-RPC methods to sanitize passed arrays for the database.
$blog_ID = (int) $args[0];
$username = $args[1];
$password = $args[2];
if ( isset( $args[3] ) )
$query = array( \'numberposts\' => absint( $args[3] ) );
else
$query = array();
if ( !$user = $this->login($username, $password) )
return $this->error;
do_action(\'xmlrpc_call\', \'wp.getPagedPosts\');
//... get a list of posts and generate your XML-RPC return ...
}
请记住,这是您要放在外部插件文件或
functions.php
文件,以支持额外的XML-RPC请求。没有任何现有的方法来处理此问题,因此您只能自己编写。但如果你做了一次,并且做得很好,然后把它提交给Trac。。。它可以成为核心,这样你就不必再做了。