次期 WordPress に実装される、投稿の履歴機能がどうなっているのか気になってちらっとみてみました。 これは、投稿したあとの修正が履歴となって残り、その差分比較ができるという機能です。 とりあえず、UI からみていきましょう。
投稿の編集画面の最下部に post revisions 項目が追加になっています。
これは投稿の修正ごとに増えていきます。 これをクリックすると新設された、Compare Revisions 画面に遷移して、下で比較するリビジョンを選択して、上でその diff をみれるようです。
なかなか面白い機能ですね。
ぼくは CMS 系のアプリケーションの本当の意味でのコアというのは、こういったデータの持ち方だと思っていて、コンテンツをどういう観点で整理してタンキングしていくか、という部分がそれぞれの CMS の特色だと思います。
WordPress の場合は、もともとブログシステムなので時系列につよい特色があります。 それに付随して記事に対してのメタ情報、タグであるとか階層をもてるカテゴリであるとか、記事に対してシステムユーザ管轄ではない情報をあたえるコメントであるとかという機能が使えます。
wiki 系なんかはあまり時系列にはつよくないですが、履歴がもてたり、ユーザ管理につよかったり、ワークフローをもっていたりします。 今回 WordPress は履歴の機能をもつことになり、簡易的なワークフローである pending 機能とあわせて、ユーザ同士の文書のやりとりを行う意図もあるのかなーと思ったのが第一印象です。
CMS の設計ってこの辺が一番面白いんですよね。 🙂
さて、この履歴機能の実装ってどーなってるんだろーっとおもってぱらっとテーブルをみてみました。 予測するにトランザクション用のテーブルがひとつふえてる!
[tegaki]・・・ふえてない![/tegaki]
てなわけで、ぜんぶ wp_posts にもたせたようです。 いままで、wp_posts は直近の投稿内容をもつテーブルでしたが、今回からある意味トランザクションテーブルにかわります。 じゃー、主キーはどーなるの? って話ですが、 ID のままです。
そう、履歴がとられるごとに ID ふえるんですね。 でもって、post_name ってページスラッグ名をいれるところに、履歴レコードの場合の親記事ID とリビジョン文字列をいれるという、かなり強引な下位互換を考えた実装になっています。 😛
でさー、ぼくは全然気にしないのですが、パーマリンクの ID の歯抜けを気にする方はちょっとあれかもですね。。過去記事の修正ごとにレコードできるので、その場合は新規投稿は番号抜けします。 あと、これは微々たるものですが wp_posts の容量の増加量も増えます。
テーブル増やして、機能の使う有無を選択できるようにしてくれればよかったのになーと思いましたがはたしてみんなの評判はどうか。 気になるところであります。
# 時間無くてぱっとみで、ソースまで追えなかったのですが、この機能、きれないよね?
Codex に「Revision Management」というドキュメントがあります。
http://codex.wordpress.org/Revision_Management
これは 5月に作られたページで、オートセーブなどについて書かれているようなのですが、データの持たせ方自体は 2.6 と同じっぽいように思います(古いのは自動削除で)。このページも 2.6 もちょっと覗いただけでまだよく分かってないのですけど、post_name とか、post_type に ‘revision’ って持つとか。。
そして、「Revision Options」に隠しオプションについての記述が……!
<つづく>
(いえ、続きません。。(^-^;)
そかー、2.5 でもオートセーブは同じ仕組みを使っていたのですね。そーいや、どこに保存するのか気にしたことなかったですわ。(笑) ふむふむ。
WP_POST_REVISIONS を wp-config.php に 0 を指定すれば動かなくなる。0 以上は、履歴のとる数ですね。 にゃ〜るほど。
ってことは、ここのサイトでは 0 を指定すればいいわけだ。 🙂
ありがとうございました!
# ぼにょをさそうエントリだったということはいうまでもない。 😛 😛
まだ、ベータ2 のせいか wp-config.php での定数設定はできないのかな!
wp-settings.php いじるときれました〜。 😀
おいらもさくっと切りました~:)
MediaWiki みたいに「軽微な変更」のチェックボックスが欲しいですよね。このチェックを入れると、履歴を追加せず、最後の履歴を上書きしてしまうという……。
実は、WP 2.5 に「軽微な変更」チェックボックスをつけるというプラグインを開発していて、その機能は「更新 ping を飛ばさない」というものだったのですが、画面がうまく作れずに断念してしまいました。
履歴機能が付くとなると「軽微な変更」の設定機能が必須だと思われるので、このプラグインの開発を復活するか、WP 2.6.1 に実装してもらうかを考えたいところですね。
yuriko さん
そーなんすよねー、「軽微な変更」ぼくも思いました。
あと、既存記事修正時に publish 前、修正結果のプレビューってできないですよね? なんかこれこそ元からできそうな仕組みなんですが、だめでしたっけ。(笑)
おでこさん
ずばっと。 😉