やっとこのブログを、再びXHTMLに準拠させることが出来ました。もっとも、1.0 Transitionalですが(ぼそ)。
とは言っても、WordPressのヴァージョンが2.2になってから標準機能に取り込まれた「Widget」が従来の「Sidebar Widget」と微妙に異なる動きをするなど、従来どおりにWidgetの機能を扱えない部分が出てきてしまったため、XHTML準拠のために涙ぐましい努力が必要だったわけであります(ぉぃ)。
まず、従来のWidgetプラグインの時から「テキストウィジェット」を多用してこられ、且つその中にクエリ・パラメータを大量に含むURIを書くことの多い人であれば、WordPress 2.2に移行したあと、W3CのValidatorで報告されるエラーが急増しているはずです。
そう。これまで、テキストウィジェットの入力欄に「&」という記述をおこなえば、そのまま「&」として登録されたわけですが、WordPress 2.2のWidget機能では、「&」と記述しても登録後は勝手に「&」となってしまうのです!
まあ、Widgetの何かしらの機能を更新するときに、都度全テキストウィジェットのすべての箇所で「&」と入れ直して登録すれば一応問題ないのですが、そんなクソ面倒くさいことを毎回やっていられません。
というわけで、テキストウィジェットでクエリ・パラメータを含むURIを記述していたり、将来的にその可能性のある方は、「wp-includes/widgets.php」の522行目にある
$text = attribute_escape($options[$number]['text']);
の記述を、
$text = htmlspecialchars($options[$number]['text'], ENT_QUOTES);
に置き換えてしまいましょう。これで、従来どおりにテキストウィジェットを使えるはずです。
そのほか、今回Widgetが標準機能に組み込まれたことにより、「Executable PHP widget」についても正常に動作しなくなっております。
こちらはもっと深刻で、Widgetの数を増殖させて「PHP Code 2」や「PHP Code 3」などにPHPコードを記述しても、画面上には「PHP Code 1」の内容しか出てこなくなっております。
残念ながら、私はこちらの原因については全くわかりません。
なお、この問題により「Telmina」の運営にどう支障が出たのかと申しますと、「近頃のコメント」と「近頃のトラック・バック」を別のWidgetに振り分けることが出来なくなってしまったわけであります。
一応、「Get Recent Comments」とWidgetがあれば、自分でPHPコードを書かずとも「近頃のコメント」や「近頃のトラック・バック」の機能を簡単にWidgetに取り込むことが出来るのですが、これをやってしまうとXHTMLに準拠しなくなります。どういう訳か、Widgetに付与されるIDが重複してしまうのですね。
というわけで、自分はWordPress 2.1の時から、PHPコードをわざわざ記述して「近頃のコメント」や「近頃のトラック・バック」の機能を実現させていたわけです。
ところが、先述の「Executable PHP widget」の問題でそれの実現も難しくなり、結局ひとつのWidgetに「近頃のコメント」と「近頃のトラック・バック」の両方のコードを記述することにより解決いたしました。
これでやっとXHTML準拠となりましたが、どうも腑に落ちません。
もっとスマート且つエレガントな解決法をご存じの方がいらっしゃいましたら、教えてください。
*



