AUG
13

WPCustomFieldsEditorよもやま噺

Published:2008-08-13 19:07:33 UTC

このエントリではWPCustomFieldsEditorを製作するにあたって蓄えたトリビア(死語?)紹介をしてみます。後半愚痴だか雑記だかよく分からなくなっていますが。 ん?二度ネタが多い?それは仕様です。

ログイン情報の取得方法

WPCustomFieldsEditorではXML-RPCを使ってWordPressを操作しています。WordPressをXML-RPCで操作するには、WordPressのエンドポイントURLとログインするためのユーザー名とパスワードが必要となります。これらは、リフレクションなどを使って、Windows Live Writer(以下WLW)が内部に保持している情報を取得しています。エンドポイントURLはBlogクラスのPostApiUrlプロパティから、ユーザー名とパスワードはXmlRpcBlogClientクラスのUsernameプロパティ、Passwordプロパティからそれぞれ取得できます。これらのクラスのインスタンスの取得方法については、SharpLab. – 中まで見よう!Windows Live Writerというエントリに書きましたのでそちらを参照してください。

WP-XML-RPC APIの情報の集め方

WordPressをXML-RPCで操作していると述べましたが、WordPressにはmetaWeblog APIを拡張したWP-XML-RPC APIがあり、これを使用しています。metaWeblog APIについてはMovableType で使える XML-RPC APIというページが詳しいです。WordPressが独自に拡張した部分についてはXML-RPC wp « WordPress Codexに纏まっています。

ただ、これだけでは残念ながらWordPressのXML-RPCについて網羅しきれていません。最近新しく追加された機能などについて調べる場合はwp-xmlrpc Info PageからMLのアーカイブをさらう必要があります。

それでも良く分からなかったら?幸いWordPressはOSSです。ソースコードを読みましょう。その際、便利なのがこちら、PHPXref 0.7: WordPress (latest release)。PHPXrefというツールで、クロスリファレンス化したWordPressのソースコードが掲載されています。

WP-XML-RPC APIによるカスタムフィールドの扱い方

[wp-xmlrpc] exposing and manipulating custom fieldsに記述があります。大体分かり易い記述ですが、ちょっと躓くところがあったので記しておきます。以下の部分。

If a custom field entry included with a post contains an "id" value then an update is done. If there is no "id" then an add is done. If there is an "id" value and no "key" value then the custom field with that id is deleted.

「なになに…idがなければ新しいカスタムフィールドとして追加され、idはあってもkeyがなければそのカスタムフィールドは削除されるとな?」と理解し、追加したい場合はidに空文字列を持たせる形で実装を進めたのですが、うんともすんとも動かない。カスタムフィールドを削除しようと思ってkeyに空文字列を渡した場合には空文字列をキーにしたカスタムフィールドが出来てしまうという始末。(管理画面からは空文字列をキーにすることは出来ないのでバグでしょう。)

実はno idという状態とはidの値を空にしろ、という意味ではなく、idというメンバ自体を持たせるな、ということでした。今振り返ってみて素直に読めば確かにその方が読んでいて通りが良いですが、なんだかなー、もーちょっとわかりやすくしてくれよ、と思いました、はい。

アンダーバーで始まるフィールド

SharpLab. – WPCustomFieldsEditor制作中というエントリにも書いたのものですが。

WordPressの管理画面からは見えないのですが、WP-XML-RPC API経由だと_edit_last、_edit_lockや、_encloseme、_pingmeなどの謎のカスタムフィールドが見える場合があります。これらアンダーバーでキー名が始まるカスタムフィールドですが、結局ググってもよくわからなかったので、WPCustomFieldsEditorでは一律無視することにしています。従って、ユーザーがアンダーバーでキー名が始まるカスタムフィールドを作成した場合も巻き添えで無視されてしまうので、運用には十分注意してください。