単体記事でコメントを書き出す際、勝手に p タグが書き出されてしまう。
これは comment_text() 関数内で行なわれている以下の処理が原因。


#wp-includes/comment-template.php
----------------------------------------------------------------------
function comment_text() {
  echo apply_filters('comment_text', get_comment_text() );
}
----------------------------------------------------------------------


しかしこれを以下のようにすると、コメントの改行が無効になってしまう。


#wp-includes/comment-template.php
----------------------------------------------------------------------
function comment_text() {
  echo get_comment_text();
  //echo apply_filters('comment_text', get_comment_text() );
}
----------------------------------------------------------------------


そこで、"functions.php" へ新たに関数を追加してみた。


#wp-content/themes/テーマ/functions.php
----------------------------------------------------------------------
function comment_text_nl2br() {
  echo nl2br(get_comment_text());
}
----------------------------------------------------------------------


ここで注意してほしいのは、"comment-template.php" ではなく "functions.php" に関数を追加するということ。

何故かというと、この関数追加は既存システムの「修正」ではなく「拡張」であるから。
"comment-template.php" は全てのテーマ共通で使用しているソースであり、今回の p タグを取り除くという行為は現在作成しているテーマでのみ「拡張」として使用するのだ。
しかしソースコード管理について深く考えたくない人はご自身のやりやすいようにw


WordPressを本格的に触ってまだ2日目。
もしかするとこの対策は間違えているかも知れまへん。
もっと良い方法をご存知の方がいたら教えてくらさいー。
(apply_filters() の解析が面倒www)




「飲食店」というカテゴリがあり、そのカテゴリIDは7とする。

「飲食店」カテゴリのテンプレートをカスタマイズする場合は "category-7.php" を編集すれば良いわけだが、投稿の詳細(単体記事だけが表示される)ページのデザインも「飲食店」カテゴリーと統一させたい場合はどうすれば良いのだろう?

色々調べてみたが方法が見つからなかったので、以下で対応した。

wp-includes/template-loader.php 30行目付近

----------------------------------------------------------------------
前略...

} else if ( is_single() && $template = get_single_template() ) {

  if (in_category(7)) {
    $template = TEMPLATEPATH . '/category-7-single.php';
  }
  include($template);
  return;

} 後略...
----------------------------------------------------------------------

こうする事で「飲食店」カテゴリの詳細ページテンプレートを他と切り離すことができる。
ソース内をもっと綺麗に書きたければ、 "functions.php" に書くといいかもね。



-----------------------------------------------------------------------
追記 2008.06.30
WordPress日本語サイトは通常通り運営されているみたい(笑)
「WordPress 閉鎖」で検索すると色々な情報が出てきたものだから、その情報に翻弄されてしまった・・・。
何はともあれ、ヨカッタヨカッター。
-----------------------------------------------------------------------


残念なことに WordPress の日本語サイトが閉鎖された。
これはかなりの人が痛手を負っているはず。
(現に私もショックを受け、さらにWordPressで構築しようと考えていた業務がストップ…)

http://ja.wordpress.org
ページにアクセスしてみると真っ白。


しかしソースの入手方法が残っていたのだ!!
これは期間限定的な方法かも知れないので、必要な人はお早めに。


WordPress 2.5.1 日本語版
http://ja.wordpress.org/wordpress-2.5.1-ja.zip

WordPress 2.5.1 用日本語リソースのみ
http://svn.automattic.com/wordpress-i18n/ja/tags/2.5.1/messages/ja.mo


今後の日本語版バージョンアップサポートは今のところ無さそうなので、あくまでも自己責任でね。
そして先方に迷惑かけちゃダメだよ。


どのような理由で閉鎖されたのだろうか…。
何か問題があるのならお手伝いしたいなー。


-----------------------------------------------------------------------
追記
こちらのフォーラムで有志の方々がWordPress ME 2.0.x のサポートを継続していただけるようです。
ありがたや、ありがたや。
http://sourceforge.jp/projects/wpme/





私が使用しているブラウザはFirefox3。
Youtube や BREAK などの動画サイトでコンテンツを再生しても、なぜか2秒あたりで停止してしまう。
そして音も出ない…。

これは Flash Player 9 がバカなようで、以下サイトから
Flash Player 9 (デバッガバージョン) (107 MB)を入手することで解決ができる。
http://support.adobe.co.jp/faq/faq/qadoc.sv?228683+002

(1) 上記 URL からファイルを入手。
(2) ダウンロードした fp9_debug_archive.zip を解凍。
(3) 解凍したフォルダを開き、さらに「9r47」のフォルダを開く。
(4) その中にある flashplayer9r47_win_debug.exe をダブルクリックで実行。
(5) Firefox3 を再起動する。

これで問題は解決する模様。



DB と PHP を UTF-8 で動かしているので、Smarty テンプレートも UTF-8 で構築したいところ。
しかしクライアント様から「ページはSJISで表示して欲しい」との要望が。

DB と PHP の設定を変えずに、Smarty 側だけで文字コードを変更する方法があったのでメモ。


はじめに、全てのページから共通で呼び出されているPHP「common.inc.php」が存在するとしよう。

common.inc.php
----------------------------------------------------------------------
略...

function sjis_encoding($tpl_output, &$smarty){
  $tpl_output = mb_convert_encoding($tpl_output,'SJIS', 'UTF8');
  return $tpl_output;
}
----------------------------------------------------------------------
このような関数を準備しておく。
これはマルチバイト関数を使用して UTF-8 から SJIS に変換するというモノだけど、これを Smarty から呼び出すんだ。



hogehoge.php
----------------------------------------------------------------------
略...

$smarty->assign('hoge', $hoge);
$smarty->register_outputfilter('sjis_encoding');
$smarty->display('page.tpl');
----------------------------------------------------------------------

全変数の assign が終わり、display を呼び出す直前で register_outputfilter('sjis_encoding') を実行するのだ。

この register_outputfilter メソッドは Smarty で標準提供されているもので、テンプレート出力が表示される前に指定されたコールバック関数が実行されるというもの。
http://www.phppro.jp/phpmanual/smarty/advanced.features.outputfilters.html

Smarty は完成度高いね。



待ち受け画面上に表示されるアプリ「EZニュースフラッシュ」が邪魔で仕方が無い。

以下の設定で一旦表示を消すことが出来るが、待ち受け状態で上ボタンを押すと顔を出しやがる。
■方法
 機能設定
  ↓
 画面表示/照明
  ↓
 ディスプレイ設定
  ↓
 ニュースフラシュ設定
  ↓
 テロップOFF/ウィンドウON

ニュースフラッシュのアプリ自体を削除しても、上ボタンを押すとやはり表示されてしまう。
■方法
 アプリボタン
  ↓
 EZニュースフラッシュにカーソルを照射
  ↓
 メニューをクリック
  ↓
 削除を選択


あーイライラ。

ニュースフラッシュ邪魔!!
ニュースフラッシュ削除したい!!

ニュースフラッシュ邪魔!!
ニュースフラッシュ削除したい!!

ニュースフラッシュ邪魔!!
ニュースフラッシュ削除したい!!

買うんじゃなかったW61CA。

Smarty でi18n(言語の国際化、多言語化)を1つのテンプレート内で実現しようとした場合、以下のような記述方法がある。

 <h1>
  {if 'en'==$smarty.const._LANG}Hello!!{/if}
  {if 'ja'==$smarty.const._LANG}こんにちは!!{/if}
 </h1>

しかしこれではソースコードが汚く、可読性が悪すぎる


どこかで見たWebアプリで実装されているi18nの方法を、Smartyでも実現したいと思った。
その記述方法とは、

<h1>[en]Hello!![/en][ja]こんにちは!![/ja]</h1>

こんな感じで。
しかし Smarty では、このような便利な分岐方法ができねー。


で、PATHC さんで公開されているSmartyプラグインを修正して実装してみたら、案外スマートなソースコードが実現。
私が実装しているプラグインはこちら。

function smarty_function_i18n($params, &$smarty)
{
 //言語を取得
 $lang = _LANG; //定数の言語指定値を取得(ja,enなど)

 $output = null; //init
 if(isset($params[$lang])){
   $output = $params[$lang];
 }
 return $output;
}

これをファイル名 function.i18n.php で Smarty の plugins ディレクトリ内に保存し、以下の方法で関数を呼び出す。

<h1><{i18n ja="こんにちは!!" en="Hello!!" }></h1>

これでスッキリしたテンプレートが作れますね。


ちなみに多言語化で頻繁に出てくる i18n の意味は internationalization の略で、
頭文字 i と末尾の n を取り、その間にある18文字が長すぎるということで i18n が使われるようになったとのこと。

勉強になったね。




ソニーが発表したかっちょいいスピーカ「Sountina」。
http://www.sony.jp/products/Consumer/AV-HiFi/sountina/index.html


これは有機ガラスというモノで作られている。
やじうまWatchの以下ページを読んで、有機ガラスについてWikipediaを見てみた。
http://internet.watch.impress.co.jp/static/yajiuma/2008/05/29/


# 有機ガラス
#  ↓
# アクリル樹脂
#  ↓
# メタクリル酸メチル樹脂
#  ↓
# メタクリル酸メチル樹脂の構造式
メタクリル酸メチル樹脂の構造式


まるで、社交ダンスでも踊っているような構造だ。
さすが天下のソニー、ここまでぬかりないとは。




ブログへのコメント投稿や、問い合わせフォームで見かける画像認証。

こんなやつ。

kcaptcha

ページにアクセスするたびに違う文字列が表示され、それをユーザに入力してもらうことでイタズラ投稿を防止するというもの。

キャプチャについての詳しい説明は、他のWebサイトに任せよう。
Wikipedia CAPTCHA

使い勝手の良さから、私はロシア製の Kcaptcha(ケイキャプチャ) を多用している。
みんなもイタズラ投稿を防止したいなら、使ってみるといいよ。
PHPを理解している人なら誰でも簡単に導入ができるよ。

導入方法は以下Webサイトへ。
PHP:画像認証「KCAPTCHA」|ADSL + 自宅 Linux サーバ

私の使い方がマズイのかは分からないが生成する文字数を増やすとマシンが高負荷状態になり、ヘタすりゃ落ちてしまう。
限界は5桁程度なのかな?

スクリプトを解析する時間がないので、とりあえず放置しておこう。
誰か上手な使い方を知っている人、コメントちょうらい。