ここ数年、このブログをはじめブログを使うときにはほぼ100% WordPressを使っていたのですが、最近ブログとしての用途以外(すなわちCMSとして)でもWordPressを活用するようになりました。
CMSとしてのWordPress
WordPressのよいところは、
- PHPとMySQLが動くサーバーならどこでもOK(大抵のレンタルサーバーで使える)
- インストールが簡単(インストーラがついている)
- プラグインとテーマが充実していてカスタマイズが用意
- ブラウザ上で簡単にコンテンツの管理ができる(ブログだから当然ですが)
- 無料
といったところで、現在ではブログに限らず多くのウェブサイトの構築に使われています。高機能でありながら、設置とカスタマイズのコストがとても小さいのが大きな強みです。
WordPressはブログやホームページの制作に使われるのが一般的ですが、CMS的な使い方をしても便利ですよ、というのが今回のテーマです。
ソフトウェアのバージョンを案内するサイトの例で、みてみましょう。
カスタムフィールド
WordPressの標準の機能を使ってソフトウェアのアップデートを案内するこのポストを書くとこうなります。
しかしこの方法はスマートではありません。
- 次のアップデートでも、同じような定型文を手動で打ち込むのは面倒くさい。かといって、表記にぶれがでたら格好わるい。
- 後でデザイン、文面を変更したくなった時に過去の履歴も全部手動で書き換えるのが大変。
- そもそも、「バージョン番号」「変更内容」「ダウンロード用URL」以外は定型なのに、それをコピーして保持するのは美しくない。
もしWordPressを使わずに、例えばRuby on Railsを使ってこのソフトウェアのバージョンを管理するウェブサイトを作ろうとしたら、「バージョン番号」「変更内容」「ダウンロード用URL」この三つの項目だけを管理するモデルを作成するでしょう。これらの情報が本文内に埋め込まれた状態で管理されているのは、やはり美しくありません。
カスタムフィールドを使うと、これらの情報をわけて登録することができます。登録されたカスタムフィールドの値はテンプレート内でget_post_meta関数を使って取得できます。詳しくは Custom Fields << WordPress Codex を参照。
<a href="<?php echo get_post_meta($post->ID, 'download_url', true); ?>">Download</a>
カスタムフィールドを使って分けてデータを管理することで、後から文面やレイアウトを変更するのが容易になり、また毎回文面をコピペする必要がなくなりました。
カスタム投稿タイプ
記事毎に「download_url」「version」というキーを手動で追加していくのも面倒だ、という場合はカスタム投稿タイプを使うとより便利になります。カスタム投稿タイプでは予めエディタ上にカスタムフィールドの入力欄を用意しておいて、必要に応じてバリデーション等も追加できるので、より確実にデータを管理できます。
また、カスタム投稿タイプは管理画面上でも投稿・ページとわけて表示されるので、より管理もしやすくなります。ただし、カスタム投稿タイプを実現するにはテーマファイルに手を入れる必要があり、若干面倒なのも事実なので必ずしもおすすめというわけではありません…。
なお、カスタム投稿タイプを使って投稿された内容については、そのままではトップページの新着ポスト一覧、RSSには表示されないので注意が必要です。
XML-RPCを使って自動投稿
カスタムフィールド・カスタム投稿タイプを使うことでコピペという作業から解放され、アップデートの案内を投稿するコストは下がったわけですが、それでも何回何十回とアップデートの案内を書いていると、段々投稿作業自体が面倒臭くなってきます。変更内容のリストアップはともかく、それ以外の項目(ダウンロードURLやバージョン番号)の入力は創造性を伴わない作業です。
行き着く先は投稿作業自体自動化です。幸いWordPressには、管理画面を介さずに記事の投稿を可能にするXML-RPCの仕組みがあります。
require 'xmlrpc/client' def post_to_wp(version, url) title = "Version #{version}" body = "What's new in this version." user = 'foo' pass = 'bar' publish = 0 server = XMLRPC::Client.new('localhost', 'wp/xmlrpc.php') article = { 'post_title'=>title, 'post_content'=>body, 'post_type' => 'software_release', 'custom_fields' => [ {'key' => 'download_url', 'value' => url}, {'key' => 'version', 'value' => version} ] } id = server.call("wp.newPost",1,user,pass,article,publish) end
ソフトウェアのリリースのスクリプト内でXML-RPCを使って「ドラフト」を投稿するようにしておけば、手動でやらなければいけない作業は変更内容のリストアップだけになりとても便利です。ありがたいことに、WordPress 3.4以降ではXML-RPCの機能が拡張され、カスタム投稿タイプの記事についても投稿できるようになっています。詳しくはこちら。
まとめ
というわけで、カスタムフィールド・カスタム投稿タイプ・XML-RPC等を活用すると、WordPressはコンテンツ管理用途でも便利に使うことができます。今回はわかりやすさ重視でソフトウェアのアップデート案内というパブリックな用途のもので書きましたが、実際僕自身はプロジェクトチーム内での中間成果物の管理など、仕事の中でも活用していて、手軽にこの手のコンテンツ管理ができるのは便利だなあと感じています。
もちろんこの手のシステムはRails等を使っても簡単に作ることができますが、「あったら便利」というような用途であれば、デプロイのコスト、サーバーのコスト、負荷対策等を考えるとWordPressを使うのは選択肢として悪くないのではないかと考えています。