XMLRPC を拡張するプラグインの作り方、あとでメインブログに清書します。
プラグイン本体
<?php
/*
Plugin Name: Ex XMLRPC
Version: 0.0.1
Plugin URI:
Description:
Author: wokamoto
Author URI: http://dogmap.jp/
*/
function wpex_xmlrpc_server($class_name) {
if (!class_exists('wpex_xmlrpc_server'))
require_once 'class-wpex-xmlrpc-server.php';
return 'wpex_xmlrpc_server';
}
add_filter('wp_xmlrpc_server_class', 'wpex_xmlrpc_server');
?>
class-wpex-xmlrpc-server.php
<?php
class wpex_xmlrpc_server extends wp_xmlrpc_server {
function __construct() {
parent::__construct();
$this->methods['wpex.getWpVersion'] = 'this:wp_getVersions';
}
public function wp_getVersions( $args ) {
global $wp_version, $wpdb;
if ( count((array) $args) > 2 ) {
$this->escape( $args );
$blog_id = (int) $args[0];
$username = $args[1];
$password = $args[2];
} else {
return $this->error;
}
if ( !$user = $this->login($username, $password) )
return array(
'wp' => $wp_version ,
'php' => PHP_VERSION ,
'mysql' => $wpdb->db_version() ,
);
} else {
return $this->error;
}
}
}
確認方法
<?php
require_once("XML/RPC.php");
$host = "example.com";
$xmlrpc_path = "/xmlrpc.php";
$appkey = '';
$user = 'username';
$passwd ='yourpassword';
$c = new XML_RPC_client($xmlrpc_path, $host, 80);
$appkey = new XML_RPC_Value($appkey, 'string');
$username = new XML_RPC_Value( $user, 'string' );
$passwd = new XML_RPC_Value( $passwd, 'string' );
// blog ID の取得
$message = new XML_RPC_Message(
'blogger.getUsersBlogs',
array($appkey, $username, $passwd)
);
$result = $c->send($message);
if( !$result )
exit('Could not connect to the server.');
else if( $result->faultCode() )
exit($result->faultString());
$blogs = XML_RPC_decode($result->value());
$blog_id = new XML_RPC_Value($blogs[0]["blogid"], "string");
// 拡張された XMLRPC メソッド wpex.getWpVersion の取得
$message = new XML_RPC_Message(
'wpex.getWpVersion',
array($blog_id, $username, $passwd)
);
$result = $c->send($message);
if( !$result )
exit('Could not connect to the server.');
else if( $result->faultCode() )
exit($result->faultString());
var_dump(XML_RPC_decode($result->value()));
?>
実行結果
array(3) {
["wp"]=>
string(5) "3.2.1"
["php"]=>
string(5) "5.3.6"
["mysql"]=>
string(6) "5.5.14"
}
追記:
こんな面倒なことしなくても xmlrpc_methods ってフィルタに引っ掛ければ良いだけだった…orz
WordPressにおけるXMLRPCの開発・・メソッドの増やし方とか – それ図解で。・・・tohokuaikiのチラシの裏
コメントを残す