「WordPress 2.3.2 日本語版への移行」の記事にいただいたコメントから。
日曜日と土曜日をそれぞれ赤色と青色の文字にしたい
ということで、これに対応してみました。流石にこれは日本語化ファイルだけでは如何ともし難いので、例の如くカレンダーを描画している/wp-includes/general-template.phpを直接改変しましょう。実行例はご覧のサイドバーの通りです。
それなりに泥臭いコーディング
要は条件(土曜・日曜)に合致した際の出力内容を追加するといったものです。
まずはヘッダ部
559行目に実装されています。
echo "\n\t\t<th abbr=\"$wd\" scope=\"col\" title=\"$wd\">$day_name</th>";
ここで、曜日を判定してclass属性を加えます。
echo "\n\t\t<th abbr=\"$wd\" scope=\"col\" title=\"$wd\"";
if ($wd == $wp_locale->get_weekday(0)) {
echo ' class="sunday"';
}
elseif ($wd == $wp_locale->get_weekday(6)) {
echo ' class="saturday"';
}
echo ">$day_name</th>";
次に、日付表示部
649行目に実装されています。
if ( $day == gmdate('j', (time() + (get_option('gmt_offset') * 3600))) && $thismonth == gmdate('m', time()+(get_option('gmt_offset') * 3600)) && $thisyear == gmdate('Y', time()+(get_option('gmt_offset') * 3600)) )
echo '<td id="today">';
else
echo '<td>';
最初の行は同じなので、書いていません。
echo '<td id="today"';
else
echo '<td';
if ( calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))) % 7 == 0 ) {
echo ' class="sunday"';
}
elseif ( calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear))) % 7 == 6 ) {
echo ' class="saturday"';
}
echo '>';
これらの変更(と、先の記事で施した月表示部の変更)を加えたファイルgeneral-template.php改変版も、ご参考までに添付します。
表示はスタイルで制御
表示と論理との分割の観点からもコード依存性は薄めたい物です。コードには変色内容を書かず、普段のスタイルシートを使いましょう。例えば以下のように記述します。
#wp-calendar .saturday { color : blue; }
#wp-calendar .sunday { color : red; }
今更要件定義 ~ ただし手戻りは最小に
さて、ここでコメントをいただいたphaさんの要件を振り返りましょう。日曜日と土曜日の変色ですが、これはヘッダ部(月火水木金土日)のみを指すのか、それとも各日付部も同様なのでしょうか。今更前者案を取って仕様変更が入ると泣けるのですが、しかし、あまり大変ではありませんのでご安心ください。
日付部を変色するかは再考の余地有り
各日付部も変色するなら、上記の通りで問題ありません。しかし、私はこの変色方法はやめてしまおうかと考えています。それは、以下の理由に依ります。
- 土曜の青色と、(当該日に記事が存在することを示すリンクの)青色が被ってしまう。一般的に土曜は青、リンクも青という慣習があるため、わざわざ別の色にするのも考え物である。
- 日曜を赤色にしたとして、それを推し進めて祝日を赤色にしようなどと際限が無くなってしまう。仮に祝日を色付けする場合、祝日取得サブルーチンを書くなどしてコードが増える。
- さらに、祝日は国毎に異なるため、なまじ国際語エスペラントを肴にしているこのウェブログでは地域限定の表示とならないか不安である。
再びスタイルで制御
変色は日付部には施さず、ヘッダ部のみとしたい場合でも、せっかく書いた上記のコードを直すのは勿体ないです。こういう指針は半分は気分の問題なので、後になって「やっぱり日付部も色を変えたい」と思ってからコードを復活させるのは面倒ですよね。
そこで、今度もまたスタイルシートで以下のように変更すれば済みます。
#wp-calendar th.saturday { color : blue; }
#wp-calendar th.sunday { color : red; }
クラスがsaturday「のth要素」と、クラスがsunday「のth要素」に限定するという方法です。日付部ではtd要素ですので、saturdayやsundayのクラス属性が付いていても、表示には影響を及ぼしません。
私は会社では今は性能検証・性能改善のプロジェクトの末席を汚しているので、no-op(処理しない)コード、無駄な分岐処理は取り除く方が性能的に好ましいことは承知していますが、このように処理を省いたところでも性能への寄与は微々たる物ですのでご安心ください。
その他の備忘録
WordPressのバージョンアップへの対応を忘れずに
プラグインやテーマファイルのような自分で準備するファイルではなくWordPressの配布ファイル自体(general-template.php)への修正を加えた(つまりブランチを作っている)のですから、WordPressのバージョンアップ時は気を付ける必要があります。何も考えずにファイルを差し替えると、ブランチ方面の修正は当然のことながら盛り込まれません。従って、バージョン管理システムを使うか、或いは単純にdiffを取っていくようにしましょう。
日本語化ファイルの書き換え
上記のように行数の増減があると、ja.mo(日本語化ファイル)で、増減があった部分以降の行に表記変更が適用されないこともあります。それに応じてja.poを書き換えし、ja.moをコンパイルし直してアップロードするか、或いはgeneral-template.phpの上記の記述を1行にまとめることを考えた方が良さそうです。
先日「WordPress 2.3.2 日本語版への移行」にコメントをした者です。
記事拝見させて頂きました。素晴らしいです!
まさに日曜と土曜の部分をマークアップ出来ればCSSで何とか出来そうなのに
get_calender関数の中身がよくわからない…とゆう状態だったので
自分の求めていたものそのものです。助かりました!
しかも、期待していた以上に迅速丁寧な対応をして頂き感謝の言葉もありません。
ただ、ヘッダ部か日付部かということに関しては
仰る通り土曜とリンクの色が被るという点からヘッダ部のみのつもりでおりました
言葉足らずでお手数を掛けてしまい申し訳ありません;
あと1月をJanuaryにの件なのですが(普通に1月→Januaryです;
これまた無駄に混乱するような表現をしてしまい申し訳ありません;)
「WordPress 2.3.2 日本語版への移行」の記事を拝見して
既にja.po部分を英語表記にする方法は試していたのですが
この方法ですと1月という表示のままなんですよね…
ja.poもgeneral-template.phpも書き換えてるんですが…
色々調べましたが丸ごとphpのdate関数に書き換えてしまうと前後の月に移動しても
キャプションが当月の日付になってしまいますし。
おそらくwp_locale->get~あたりで関数引っ張ってきてるのでしょうが…。
#: wp23/wp-includes/locale.php:52
#: wp23/wp-includes/locale.php:67
msgid “January”
msgstr “January”
↑このような感じにしているのですが何か間違っているのでしょうか?
私事でお手を煩わせてしまい非常に申し訳ないのですが…。
コメント by pha — 2008/01/12 土曜日 @ 20:52:45
phaさん、こんばんは。要件を明らかにしてくださり、ありがとうございました。
さて、月名表記については、ja.poの変更内容はその通りです(一連の記述を取り除いても同じ事です)。恐らく、ja.poをja.moにコンパイルし、ja.moをアップロードする処理が抜けていると思われます(ja.poをアップロードしただけでは表示が変わりません)。
当方でも試しましたが、意図通りに表示が変わることを確認済みです。前の記事をご参考ください。よろしくお願いします。
コメント by Gardejo — 2008/01/12 土曜日 @ 21:49:23
早速のお返事ありがとう御座います。
ぬお…そういえばコンパイルする為にpoEditをダウンロードまでしてきていたというのに
何故かすっかり失念していたようです…お恥ずかしいです…申し訳ありません;
コンパイルしたところ見事上手く行きました。
何度もお手を煩わせてしまい申し訳ありませんでした。
この辺りについての情報は中々見つからないので大変助かりました。ありがとう御座いました。
コメント by pha — 2008/01/13 日曜日 @ 06:57:27
[...] WordPressのカレンダーで土日の色を変える [...]
ピンバック by aozora blog 2» ブログアーカイブ » Wordpress のマイナーバージョンアップ — 2008/02/11 月曜日 @ 23:06:20
サイトの副産物(?)的なノウハウを、これ程丁寧に、誰にでも理解し易く解説なさっている(多大な労力と時間を割いて)貴殿に、脱帽です。小生はWordPress初心者(且つプログラミングの素人)ですので、早速参考にさせて戴き、無事にカレンダーのハックを終えることができました。ありがとうございました。
貴殿の今後益々のご活躍をお祈りしております。
コメント by Joschi — 2008/03/08 土曜日 @ 08:53:33
[...] 青、日曜日→赤にしたい。 Ermitejoさんのお力をお借りする。 http://blogo.ermitejo.com/2008/01/11/sxangxu_koloron_en_kalendaro_de_wordpress/#commentlist WordPress本体のコードに手を加えるみたいだ。 1. /wp-inclu [...]
ピンバック by Green web6 » Blog Archive » カレンダーの不具合を修正;WordPress — 2008/03/11 火曜日 @ 03:21:58