WordPressでreStructuredText
- 公開日: 2012/03/25(日) 09:53[JST]
以前書いたように、このブログのシステムが今後更新されずFreeBSDのportsからも削除された状態なので、WordPressへの移行を検討していたわけだが、ちと問題があった。
私はこのサイトのコンテンツを基本的にreStructuredText(以下reST)という構造化言語(タグの代わりに字下げなどを用いた、パッと見て分かりやすい一種のマークアップ言語。htmlやpdfへの変換スクリプトが充実)を使って書いており、WordPressに移行してもこれは変えたくない。で、WordPressの編集画面でreSTを使えるようにするプラグインはいくつかあったんだけど、いずれも古いプラグインでWordPress3には対応していない。
てことで、自分でプラグインを作成することにした。とはいえ、私はプログラマじゃないし、こないだ初めてインストールしたWordPressはもとより、PHPについてもド素人だ。なので、できる限りeasyなやり方で済ませたい。
で、WordPressの本を買って検討した結果、「ショートコード」を使うのが簡単そう、という結論に達した。ショートコードとは、コンテンツのHTML編集画面で入力可能な一種の追加マークアップ要素で、タグとして「[~]」や「[/~]」を使うものだ。タグの中身や、開始タグと終了タグの間のテキストは、コンテンツの表示時にプラグインのPHPスクリプトで処理されてHTMLに変換される、というしくみになっている。
そこで、[rst]~[/rst]という、reSTコンテンツ「~」をHTMLに変換するショートコードを追加するプラグインを作成してみよう、ということになった。まあ、テキストをrst2html(reSTをHTMLに変換するpythonスクリプト)に送るだけの簡単なプラグインではあるのだが、そこはPHP初心者なのでそれなりに時間がかかった。参考にしたのは、rest-wordpressプラグインのソースコード、WordPressの解説本(藤本壱「PHPによるWordPressカスタマイズブック・3.x対応」ソシオ株式会社)、それからPHPのオンラインマニュアル。
で、まあ動くようにはなったのだが、ちょっとプラグインだけでは解決できない問題も。WordPressのHTML編集画面、純粋なHTMLではなくてそれ自体が構造化言語チックな特性を持っているっぽい。つまり、(純粋なHTMLだとスペースと等価な)改行が段落や<br>要素扱いとなっていたり、いくつかの記号はエスケープされた状態で保持されているっぽい。そのため、[rst]~[/rst]の中身のコンテンツ「~」もまた、余計なタグが入っていたり、記号がエスケープされた状態(つまりrst2htmlがマトモに解釈できない状態)でプラグインに送られてしまう。ぐぐってみたところ、WordPressのテーマのfunction.phpをいじることで解消できるとのことだったので早速適用。無事reSTが使えるようになった。
ざっとチェックしてみたのだが、表示の度にpythonスクリプトを実行させているので、素のWordPressよりはやっぱりもたつく。でも多分Ploneよりは軽い。うちくらいの過疎サイトなら十分許容範囲かなと。あと、Ploneとは表の扱いがちょっと違ってた。Ploneだと表の中の日本語(いわゆる「全角文字」)は英数文字1文字分として解釈される。で、reSTの表は、同じ列の全てのセルは(空白含めて)同じ文字数であることが要求される。そのため、この前書いた表だと、編集画面ではこんな感じになる。これはちょっとみづらい。
+----------+-----+-----+ | |e2 |J:COM| +==========+=====+=====+ |J Sports 1|HD |HD | +----------+-----+-----+ |J Sports 2|HD |HD | +----------+-----+-----+ |J Sports 3|HD |HD | +----------+-----+-----+ |GAORA |SD(1)|HD | +----------+-----+-----+ |Sky A+ |SD(1)|HD | +----------+-----+-----+ |朝日ニュースター |SD(1)|SD(2)| +----------+-----+-----+
これがWordPress(というか、rst2html)だと下のようになる。つまり全角文字は2文字扱い。ブラウザのmonospaceフォントをWesternとJapaneseとで(例えばIPAゴシックに)統一する必要があるが、かなり見やすくなった。ただし、例外がある。ギリシャ文字は(あと多分ロシア文字も)日本語のフォントだと全角だがreSTでは半角、つまり一文字扱いになるので、ギリシャ文字やロシア文字を使うと表が崩れることになる。まあそんなに使う文字でもないしいいか。
+----------------+-----+-----+ | |e2 |J:COM| +================+=====+=====+ |J Sports 1 |HD |HD | +----------------+-----+-----+ |J Sports 2 |HD |HD | +----------------+-----+-----+ |J Sports 3 |HD |HD | +----------------+-----+-----+ |GAORA |SD(1)|HD | +----------------+-----+-----+ |Sky A+ |SD(1)|HD | +----------------+-----+-----+ |朝日ニュースター|SD(1)|SD(2)| +----------------+-----+-----+
あと移行のためにやんなきゃいけないことは以下の通り。
管理画面でreSTの表が崩れないよう、textareaのフォントをmonospaceにする。(wp-admin.cssに手を加える)
全体的なサイトデザイン。コンテンツの作成窓口は一本化したい(コンテンツのカテゴリごとに編集用のURLが違うとかまっぴらだし)。でもサイト自身は今のPloneと同様、カテゴリごとに整理されたレイアウトにしたい。各コンテンツへのリンクが列挙されたメニューを入り口とする一般コンテンツと、記事を時系列で並べるブログとではレイアウトの考え方も全然違うし。一般コンテンツをブログ風のレイアウトにしたら分かり辛くてかなわん。
これが終わってようやくPloneで書き溜めた記事を移行できる。さてどうやって移行させるか。あまり熱心に書いていないブログとはいえ1000記事くらいはありそうだし。でもpython勉強してスクリプトを書くより手動でゴリゴリやった方が早いような気もする。