CMS

WordPress、好きじゃないんだけどな

webbinblog0901

今のブログは、「Sandbox for MovableType」テンプレートセットを一部改編したものです。

Sandboxはもともと、WordPressのカスタマイズ用テーマでした。
最近の個人ブログツールのシェアは、MovableTypeから、このWordPressに大きく流れている状況です。
欧米では、既にシェアは逆転しているのですが、バージョンアップに伴って、日本でも本格的になってきたようです。

ほぼ毎日、仕事で両方を利用している私としても、

MovableType=小規模→中規模の企業向けCMS
WordPress=個人→小規模のブログ

という住み分けが最適だろうと思います。

なので、このブログももっと更新しやすくて、PHPで気軽に拡張できるWordPressに切り替えた方が良いのではないかと考えはじめていますが…

個人的に苦手なのです、WordPress。
WordPressへの不満などグダグダ書き出してみます。

内蔵の関数がひどい

HTMLタグのような書式で記述したものを内部変換させるMovableTypeに対して、WordPressはPHPのプログラム(ユーザー関数)をそのまま記述します。

例えば <?php bloginfo(‘name’) ?> というのは
「name」という引数を渡すとブログ名を返す、「bloginfo」という関数
という意味です。

PHPを勉強している人にはわかりやすい仕様なのですが、いろいろな人の手を経て何度も拡張を繰り返してきたためか、関数の仕様に一貫性がありません。

bloginfo のような、引数がほとんどないものはいいのですが、何個もの引数を要求し、しかも順番が間違ってると動作しない関数も多く、あとでテーマファイルを見ても、引数だけだとそれで何をしようとしたのか、さっぱり見通しがききません。

「&lorem=TRUE&ipsum=0」のように、必要なモディファイアだけ指定する「クエリ式」が使える関数も増えたとはいえ、このクエリ式が使える・使えない関数もまたバラバラで、新しい情報をまめにチェックしなければいけません。

文章整形フォーマットが使いにくい

WordPressの本文自動成型は、かなり融通がきかないことで有名です。
普通の文章なら問題ないのですが、改行込みのHTMLタグを書いたり、アフィリエイトバナーを貼ったりすると、大抵思うようにいきません。

最新版の2.7で向上するかと思いましたが、過去のバージョンとの互換性が足を引っ張っているからか、あんまり良くなっていません。

この辺りはプラグインの追加でも何とかなるのですが、できればデフォルトの方を何とかしてほしいものです。

2009/01/08追記:
WordPress2.7になって、自動整形機能はだいぶ改善されてきました。
正確にマークアップしたHTMLの改行タグを削除するようなふざけた挙動はなくなりましたが、コメントなどの連続ハイフン、textarea内のHTMLソースなどはやっぱり正確に表示できません。

独自タグの範囲内を成形させないRaw HTML、カスタムフィールドの内容を本文に入れ込む Content Ex等の併用が無難です。

本文と追記を別個として扱えない

MovableTypeをはじめ、HTMLを編集できるレンタルブログなどは「本文」と「追記」に対して、別個の独自タグが提供されています。
これは使い方によっては便利なもので、本文と追記に別の役割を与えることで、特殊なウェブサイトを簡単に構築することができます。

ところがWordPressは、更新を簡単にすることに重きを置いているからか、本文と追記の扱いが非常にあいまいで、また、本文だけ・追記だけを自由に切り出すことはできません。

excontentプラグインを作ったのも、そのような経緯からです。

区切りが本文中の<!–more–>だけなので、うっかりHTMLタグで囲んでしまうと、一覧ページが大変なことになるのも悩みです。

コーディングの融通が利かない

WordPressは、1つの命令文で大きな固まりのHTML群を書き出す関数が多くあります。
すぐにブログを構築したいときにはとても良いのですが、デザイン上の理由でコーディングを細かく修正しようとすると、コアファイルを参考に、追加の関数を自分で作成しなければなりません。

静的ファイルが残らない

WordPressは、アクセスするたびにページを生成するのが基本です。
サーバー内にページの実体はありません。
このため、頻繁に更新するブログほど、どんどん表示が遅くなっていきます。
(MovableTypeは再構築が遅くなるのでどっこいどっこいですが)

現時点ではWP Super Chacheプラグインがよく紹介されていますが、キャッシュ生成はWordPressのコアに関わるため、バージョンが変わると動かなくなってしまったり、サーバーとの相性が悪くて最初から動作しないということも多いようです。

安全性に難がある

初期状態でインストールすると、ユーザーIDはかならず「admin」になり、管理画面のURLはブログのルートと同じ階層になります。
これだと、推測ができないのはパスワードだけなので、セキュリティ面ではかなり危ういです。
WordPressの中の人にはもっと、この辺を啓蒙していただきたいものです。

もちろん、私はWordPress設置時は管理画面の階層、IDのどちらも変更しています。

中の人々の態度がでかい

すいませんすいません主観です。

和訳のせいかもしれないですけど、なんか偉そうじゃないですかあの人たち。

「2.7にはコルトレーンという偉大な名前を冠しましたよー」
「私たちはこーんなスバラシイツールを無償で提供してますよー」

ああなんかいやだむずむずするかゆいうま。


他にもいろいろとあるのですが、これらを勘定に入れても、PHPベースの簡単さと、オーバーライド方式のテンプレートは魅力的です。
MovableTypeの管理画面がどんどん重くなっていることや、Perlを勉強する予定がないこと、携帯対応の問題(これでかい)もあり、ウェビンブログはWordPressベースになるかもしれません。
(Sandboxテーマを入れれば、移行にもそんなにかからないしね)

需要があるのは確かだし、ある程度は妥協して、いい点をガンガン伸ばしていくしかないですね。

CMS

MovableTypeカスタムフィールドの、filtersの動作について

Movable Type のカスタムフィールドで「テキスト(複数行)」という種類のフィールドを利用する際、テキストエリアへの入力内容に改行や空行を含めても、出力される文字列の改行や空行はすべて除去された状態で出力されてしまいます。

本エントリーでは、この事象を解消する方法を紹介します。
小粋空間:カスタムフィールドのテキストエリアに入力した改行をページに反映させる

mtformat

複数行のカスタムフィールドを、本文と同じように<p>と<br />でマークアップするには、「filters="default"」モディファイアを指定するのが良いとされています。

ですが、この方法では詳細に改行を制御できません。
旧来からあった「convert_breaks」モディファイアとどう違うのか、というのも気になりますが、シックスアパート社からも詳細な解説は出ていません。

MovableType4.2で、「改行を変換」「リッチテキスト」などの各フォーマットでのカスタムフィールドの挙動を、詳しく検証してみました。

結論から言うと、
「複数行カスタムフィールドの改行や空行は、再構築時に反映されない」
という解説は、MovableType4.2においては正解ではありません。

複数行カスタムフィールドにモディファイアを何も指定しなかった場合は、「各記事の本文・追記に指定したテキストフォーマット」が優先されるのです。

なので、IDが1の記事のフォーマットが「改行を変換」ならば本文と同じですが、IDが2の記事で「なし」や「リッチテキスト(WYSIWYGエディタ含む)」に変更すると、本文フォーマットが優先され、改行がなくなってしまいます。

MovableType4は後者のフォーマットで使っている人が多いために、上記のような定説ができたのか、バージョン4.0、4.1の挙動が違ったのかはちょっとわかりません。すいません。

mtformat2

なので、何らかのモディファイアでカスタムフィールドの書式を縛ることになるのですが、
一般に推薦される「filters="__default__"」は
完全に固定的なものではありません。

まれなケースですが、フォーマットを「markdown」にしたときのみ、<br />が書き出されず、意図した表示になりません。
また、

  • 「どんなフォーマットを使用しても改行を変換させない」
  • 「<p>はいらないが<br />は変換したい」

ということは、「filters="__default__"」ではできません。
(引数の__default__を別の値にする方法も考えられますが、MovableTypeのコアファイルを調べてもわかりませんでした)
この場合は、昔からあった「convert_breaks」を使用するのが確実なようです。

convert_breaksモディファイアは、本文でのテキストフォーマットを「常に無視」します。
また、「convert_breaks="0"」で、改行を変換させないようにできます。

<br />のみを変換する「nl2br」もconvert_breaksと同じ性質を持っているので、
ちょっと複雑になりますが、下記のようにすると<br />のみ有効になります。

<$mt:CF_HogeHoge convert_breaks="0" nl2br="1"$>

自分だけがブログをカスタマイズ・運用している場合や、カスタムフィールドが本文の一部であればフォーマットが変わっても良いのですが、
大抵のカスタムフィールドは特定のマークアップを行った箇所に出力したり、テーブルのセル内に出力したりと、イレギュラーな使われ方をします。
同じカスタムフィールドでも、出力先のテンプレートによって改行の個別制御が必要なこともあります。

「更新したときの気分」でフォーマットが変わってしまってはのちのち面倒ですし、CMSとしてMovableTypeの構築をする場合は、更新担当者のあらゆる設定変更を想定しなければなりません。

プログラミングにも通じることですが、的確なグローバル・モディファイアを指定することで、想定外の不具合をできるだけ予防しておきたいものです。

CMS

MovableTypeのMTVarまわりで変わったリストを作る

mt-entrylist

先日、MovableTypeで図のような、各カテゴリーのリストが左右二段になり、連番を振ったサイトマップを作りました。

HTMLだと、このような感じです。

※数字もデザインしたかったので、olではなくulでコーディングしています。
olだった場合、連番の代わりにstart属性を与えることになります。

一般に横並びのリストの場合、普通にリスティングしてから、それぞれの<li>要素をCSSのfloatで流すのですが、それだと視線が左右に流れて、あまり見通しが良くありません。
サイトマップがトップページになるデザインだったこともあり、もっと工夫して、新しいパターンを考えたいと思ったのです。

リストを作るにあたって、以下のように考えました。

  1. 出力される件数を調べる
  2. 件数を2で割る
  3. 剰余(1)が出たら前半のリストの件数に加える
  4. 二回に分けてリスティング
  5. 併せて通し番号も振る

PHPを使って、前もって配列にリストを入れ込めばそんなに難しい処理ではありません。
ですが、静的ページへの出力を考えて、できるだけMovableTypeのタグだけでできないものかと思いました。


結局、できたのがこれです。

※改行と、MTIgnoreのコメントを加えています
※2009/01/08 mtIfNonZeroのtagモディファイアを間違って書いてたので修正

興味がある方は、上のをコピペして、実際に試してみてください。

うーん…
MTVarだけで処理しようとすると、複雑すぎます…(´~`;

MovableTypeは4.1以降、配列が登場するので、出力結果を配列に入れ込んで__loop__で繰り返し処理する方法があったかもしれませんが、リストを半分に割ってオフセットしなければならない点は変わりません。

MTIfのtestモディファイアを使うと、Perlの式での条件分岐ができます。
それをうまく利用すれば、前半の計算はいらないかもしれません。

見た目の割に複雑なことはしていないので再構築のパフォーマンスが悪くなることはないのですが、拡張性を考えるともっと改良が必要みたいです。

CMS

絵描き・写真家ブロガーを簡単・無料で受け止める余地はないのか

西村様のお仕事を手がけているとき、ちょうどはてなブックマークでこんなホッテントリがありました。

絵描きさんね、blogに移行したはいいけど不評とかね。見た人には見づらいって言われるし、イラストサイトには向いてないとか、よく言われるんです。ホントに。しょんぼり。

rumblefish – イラストサイトにblogが向いていない理由

こう言ってはなんですが、写真やイラストにこだわりを持つ人は、Web製作者にとって最もハードルが高い存在です。
画像というデザイン性が高いが融通の利かないものと、日記や感想という融通が利くがデザイン性が薄いものの両共存を、一般の人より高いレベルで要求してくるからです。

私もFC2ブログ用にギャラリーテンプレートを作ってみたこともありますが、写真やイラストを一枚一枚、納得行くように見せようとすると、既存の「ブログ的レイアウト」を根本からブチ壊したり、ページ全体に関わるJavaScriptをからめなければなりません。

結局、安定性や更新のしやすさを重視するとMovableType・WordPressといった有料サーバーに設置するブログシステムをいじることになります。
また、写真の並べ方、見せ方、日記や感想をどう扱うかという好みも一人ひとり違うので、規格化も難しいものです。

現状では、要望に応えられるギャラリーを作るには、やっぱりお金がかかってしまうのです^^;


今のところ、この辺がいちばん充実しているのは、MovableType4から実装された「アイテム管理」機能ですね。

mtasset

独自タグ「MTAssets」を使用することで、記事で使用されている写真のみを全て抽出するのはもちろん、余分なファイルを作らず自由なサイズでサムネイル表示したり、写真に記事とは別のタグをつけて一覧を制御したりと、非常に柔軟なギャラリーサイトを生成することができます。

WordPress2.5の「メディアライブラリー」もかなり近いことができるようなのですが、流石に記事とデータベース単位で密接につながってはいないようです。
(この辺、まだWP2.5に対する日本語情報が少ないので私も勉強しなくちゃです)

ということは、MTはライセンスを取れば不特定多数へのレンタルもできるわけなのだから、どっかの企業が
絵描き・写真家向けのテンプレートばかり用意した、MovableTypeレンタルサービス
とか立ち上げたら、受け入れられるんじゃないのか?と。

でも、MTAssetsはサーバーに単独設置するMovableTypeだからこそ可能なシステムであって、不特定多数の膨大な写真とそれに関連するデータベースを無理なく扱えるサーバーとなると、なかなか大変でしょうね。資金もかかるし^^;

CMS

WordPress用本文制御プラグイン「Excontent」

Excontentは、WordPressの記事本文の出力方法を制御するプラグインです。
通常は本文・追記と追記のリンクが自動出力される記事部分を、アーカイブの種類に関係なく個別に出力します。

version1.1(2008-7-3)
ex_morelink関数に間違いがあったので修正しました。

» ダウンロードはこちら< /a>

使用した場合のスクリーンショットはこちら

導入方法

  1. 解凍したzipフォルダに入っている「excontent.php」を、WordPressの「wp-content/plugins」にアップロードします。
  2. その後管理画面にログインし、「Excontent」がプラグインリストに含まれているのを確認してください。
  3. 有効化」すると、次項の関数が使用できるようになります。

拡張される関数

基本の<?php the_content(); ?>の代用として、以下の関数を使用できます。

  • <?php the_excontent([string]display, [boolean]filters); ?>
  • <?php the_exmorelink( [string]more_link_text, [string]before, [string]after); ?>

パラメータ

the_excontent

エントリーループ内で、本文を表示します。

記述例
<?php the_excontent(‘body’, false); ?>

[string]display

(空:default)
<!– more –>の区切りを無視し、全ての記事を表示します。

‘body’
インデックス・アーカイブの区分を無視し、常に<!– more –>の区切り以前を表示します。

‘more’
インデックス・アーカイブの区分を無視し、常に<!– more –>の区切り以降を表示します。

<!– more –>がない場合は何も表示しません。

[boolean]filters

true (default)
記事編集画面での段落(Enter一回押し)を<p>要素に変換します。

false

入力した内容をそのまま表示します(改行の変換は行いません)

the_exmorelink

パーマネントリンクを表示します。シングルページでは何も表示されません。

記述例
<?php the_exmorelink(’[続きを読む]’, ’<p class="extended">’, ’</p>’); ?>

[string]more_link_text
パーマネントリンクの文章を指定します。
[string]before
パーマネントリンクの前に表示する文章を指定します。
[string]after
パーマネントリンクの後に表示する文章を指定します。

利用規定

WordPressはオープンソースのフリーウェアです。
WordPressのコアファイルに関わっているこのプラグインもオープンソース規定に基づいて頒布します。
商用利用、改変、スキンのfunction.phpへの組み込み等、ご自由にお使いください。

尚、基本的に改良の保障はいたしません。

動作確認

WordPress 2.6以降、WordPressME 2.0、WordPressME 2.2のデフォルト環境で動作を確認しています。

make a donation

このプラグインは、フリーウェアです。

でも、あなたのお役に立ちましたら、うぇびんぐさんに何かおごってください^^*