タイトル通りですが、半日ほどハマったのでメモ書き
WordPress から XML-RPC を使って投稿するとエラーになる
以前、作っていた WpPost https://github.com/moonmile/WpPost を markdown に対応しようかと思って、新しく建てた openccpm.com につなげようとすると、エラーになりました。このブログ moonmile.net/blog は XML-RPC で投稿できているので大丈夫なんですが、なぜか新しく立てたほうにはできない。
試しに Open Live Writer を使ってつなげようとするも、アカウント作成のときや URL を指定するときに「parse error. not well formed」と出て「-32700」なエラーコードが返されます。どうやら、送っている XML のフォーマットがダメということなんですが、どういう風にダメなのか分からず。
試しに WordPress の英語版を入れたりバージョンを変えたりしてみたのですが、XML-RPC 経由で投稿できない、なぜ?最近の WordPress は XML-RPC が初期値で有効になっているはずなのに。
PHP7 の初期値では XML-RPC が有効になっていない
WordPress 側のコード(class-IXR-message.php や class-IXR-server.php)にログを入れつつ確認していったところ原因が分かりました。
apache2 + PHP7 を入れているときに、PHP 拡張の XML-RPC が初期値では有効になっていません。このために、IXR_Message::parse() でエラーになっているらしいですね。xml_parser_create が呼び出せないようです。
openccpm.com は Ubuntu 上で動いているので、
1 | sudo apt-get install php-xml php-xmlrpc |
でインストールした後に、/etc/php/7.0/apache2/php.ini を開いて
1 | extension=php_xmlrpc.dll |
のように XML-RPC を有効にします。
すると、以下のように mt.supportedMethods で有効なメソッド一覧などが取れるようになります。