WordPressのXMLRPCメソッドの一覧を増やしたくなった。
とりわけ、ページの全削除をしたくなった。
とりあえず、XMLRPCクライアント
http://www.fabrice.co.jp/blog/download/win32-gui
から、XMLRPCクライアントをダウンロード。これが無いと面倒すぎる。
よく問合せしたいXMLRPCサーバをリストにできたり、レスポンスXMLをUTF8なら文字化けせずに見せてくれたり、手元のXMLをPOSTするものとしてロードしてくれたり、さすがにデバッグ目的で作っただけあって便利。
サーバ側でのログ
もちろん、とりたいのだけど、どーもWordPressはロガークラスは標準では無くて、PHPのerror_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の魅力かも。