tohokuaikiのチラシの裏

技術的ネタとか。

WordPressにおけるXMLRPCの開発・・メソッドの増やし方とか

WordPressのXMLRPCメソッドの一覧を増やしたくなった。

とりわけ、ページの全削除をしたくなった。

とりあえず、XMLRPCクライアント

http://www.fabrice.co.jp/blog/download/win32-gui
から、XMLRPCクライアントをダウンロード。これが無いと面倒すぎる。

よく問合せしたいXMLRPCサーバをリストにできたり、レスポンスXMLをUTF8なら文字化けせずに見せてくれたり、手元のXMLをPOSTするものとしてロードしてくれたり、さすがにデバッグ目的で作っただけあって便利。

サーバ側でのログ

もちろん、とりたいのだけど、どーもWordPressはロガークラスは標準では無くて、PHPerror_logを使うんじゃないかなーと思う。

Firebugのコンソールに出力してくれるロガープラグインがあったけど、XMLRPCの場合には使えない。

と、
wordpress/htdocs/xmlrpc.php
を見て見ると

<?php
/**
 * Whether to enable XMLRPC Logging.
 *
 * @name xmlrpc_logging
 * @var int|bool
 */
$xmlrpc_logging = 0;

っていうのがあった。このパラメータを1にしてやると、
wordpress/xmlrpc.log
でログがタマル。おー。


使い方は簡単というか、なんというか。
logIO()関数をコールするだけ。この関数の第一引数が「I」ならINPUT方向ってことで、第二引数にログメッセージを載せる。

メソッドの追加とか。

まぁ、普通プラグインにしますよね。

プラグインの作り方は前に書いたので割愛。

xmlrpc_methodsっていうフィルタにひっかける。

プラグインの1ファイルに
add_filter('xmlrpc_methods', 'add_junoe_xmlrpc_methods');
って書いて、その後、add_junoe_xmlrpc_methods関数を定義。

これは、

<?php
function add_junoe_xmlrpc_methods($methods)
{
    return array_merge($methods,     array('wp.deleteAllPage' => 'junoe_wp_deleteAllPage'));
}

とでも書いておく。すると、wp.deleteAllPageというメソッドが追加。


で、追加したメソッドのコールされる実体はjunoe_wp_deleteAllPage関数。これがコールされる。

引数は、XMLRPCで与えたもので、

<?php
function junoe_wp_deleteAllPage()
{
    $args = func_get_args();
    foreach ($args as $k => $v){
        
        logIO("I", sprintf("%s => %s", $k, var_export($v, true)));
    }
    
    return true;
}

とでもすると、さっきのログファイルにたまって分かる。

この時点ではAuthしてないので、Authから自分でやんなきゃなんない。その辺りは別のXMLRPCメソッドを見ると多分大丈夫。



あと、帰り値は、配列にすると複数だし、Stringだと1個の場合の配列と同じ。


いや、簡単だ。この簡単さっぷりがWordPressの魅力かも。