解决不能在Windows Live Writer中使用 WordPress MU 1.5.1 的 wp_getUserBlogs错误

一直使用 Microsoft Windows Live Writer 来更新自己的博客,感觉都不错。可是在前几天刚把自己所有的博客 WordPress MU 多用户版1.3.3 升级到 1.5.1后,WLW却不能好好地与MU合作了。具体是这样的,等自己在 WLW 里将文章写好后,按”Publish“ 来发表,却出现了一个 wp.getUsersBlogs 调用不存在的错误,言道要么是用户名出错,或密码不对。自己想到可能升级将我的用户名和密码搞乱了,所以赶紧登录到后台将用户名和密码统统更新了一把。再到WLW里重新发表新文章,还是同样的错误信息。为了测试一下是不是仅仅撰写出错,我试着在WLW里打开我博客上的文章,看到状态条动了一会,最后也是一个 wp.getUsersBlogs 不存在的错误。看来 WLW 整个与 WordPress MU 1.5.1 就不兼容了。

下面是我得到错误信息的全文:

log Server Error – Server Error -32601 Occurred server error. requested method wp.getUsersBlogs does not exist. You must correct this error before proceeding.


当然不甘心就因为一个升级而放弃WLW,赶忙到 WP MU 官方支持网站上找对策。竟然发现这就是个MU新版本的bug(见有人提交的错误报告http://trac.mu.wordpress.org/ticket/631)。 这个错误的罪魁祸首就是这个xmlrpc.php 文件。

要解决这个问题,主要需要改动两个地方。首先,当然是用你的文本编辑器打开 xmlrpc.php 文件。

第一、 找到第94行,如下:

Line 94 ‘blogger.getUsersBlogs’ => ‘this:blogger_getUsersBlogs’,

然后在它的前边加上下面这行代码:

‘wp.getUsersBlogs’=> ‘this:wp_getUsersBlogs’,

第二:再到文件的753行,开始复制代码到791行,然后回到代码221行 “* WordPress XML-RPC API” 处,粘帖整个刚才复制的代码。对这些代码稍作修改,就相当于插入一个新的 function 名叫 wp_getUserBlogs 修改后的代码如下:

              * wp_getUsersBlogs 
              */ 
                 function wp_getUsersBlogs($args) { 
                         $this->escape($args); 
                         $username = $args[0]; 
                         $password = $args[1]; 
                         if (!$this->login_pass_ok($username, $password) ) 
                                 return $this->error; 
                         do_action(‘xmlrpc_call’, ‘wp.getUsersBlogs’); 
                         $user = set_current_user(0, $username); 
                         $blogs = (array) get_blogs_of_user($user->ID); 
                         $struct = array(); 
                         foreach ( $blogs as $blog ) { 
              // Don’t include blogs that aren’t hosted at wordpress.com 
                                 if ( $blog->site_id != 1 ) 
                                         continue; 
                                 $blog_id = $blog->userblog_id; 
                                 switch_to_blog($blog_id); 
                                 $is_admin = current_user_can(‘level_8’); 
                                 $struct[] = array( 
                                         ‘isAdmin’  => $is_admin, 
                                         ‘url’         => get_option(‘home’) . ‘/’, 
                                         ‘blogid’    => $blog_id, 
                                       ‘blogName’  => get_option(‘blogname’), 
                                   ‘xmlrpc’   =>get_option(‘home’). ‘/xmlrpc.php’ 
                                 ); 
                         } 
                         return $struct; 
                 } 

 

最后、保存你的修改,再通过FTP上传这个文件到你的服务器,覆盖原来的 xmlrpc.php文件,就行了!你又可以用你心爱的WLW来更新你的MU博客了!

当然,如果你不想直接更改xmlrpc.php文件,你可以到这里下载已经改好的 xmlrpc.php 文件。另外,我关于这个问题的英文原文可以在这里找到

13 Responses to “解决不能在Windows Live Writer中使用 WordPress MU 1.5.1 的 wp_getUserBlogs错误”

  1. 六一updated | 流火部落

    […] 修正了rpcxml.php中的一个bug,目前可以支持Windows Live Writer离线编辑上传日志内容,编辑功能比wordpress在线的编辑功能要强大一些 0 评论 • 技术流, 部落告示 […]

  2. f8f8

    wpmu构建的电子商务站
    中文站:http://www.shangwu360.com
    英文主站:http://www.f8f8.biz

    同时还有其他55个语言站:http://f8f8.biz/?page_id=4

    欢迎企业注册并提出宝贵意见

    [Reply]

  3. Porter Schakel

    Normally I don’t learn post on blogs, however I would like to say that this write-up very pressured me to take a look at and do it! Your writing taste has been surprised me. Thank you, quite nice article.

    [Reply]

Leave a Reply

Your email address will not be published. Required fields are marked *