WordPressのテーマを変えました。ついでに複数widget対応してみました。

ちょうど自作のWordpressに乗り換えてから丸二年たったこと、
また長く前のテンプレートを使ってたのと、
仕事でテンプレートの量産をすることになったので、
勉強がてら落ちてるテンプレを回収して とかやってました。

意外とめんどかった。。

今回手間取ったのが複数widget対応で
検索して出てくるブログがどれこれも間違ってるww
google先生もそのソースが動くかどうかまでは検索結果に反映してくれないようです。

で、その動かないソースは大抵こんなかんじで書いてあって、

if ( function_exists('register_sidebar') ) {
    register_sidebars(2);
    register_sidebar(array(1,
        'before_widget' => '',
        'after_widget' =>'',
        'before_title' => '',
        'after_title' => '',
    ));
    register_sidebar(array(2,
        'before_widget' => '',
        'after_widget' =>'',
        'before_title' => '',
        'after_title' => '',
    ));
}

これじゃ動きません。
しかもこんな感じのソースが3つくらいブログにのってたなぁ。
コピペしただけで、使わずに満足でもしたんだろうか。。

で結局ソースを当たって、あとドキュメント読んだらこんなかんじでした。
http://codex.wordpress.org/WordPress_Widgets_Api/register_sidebars

まずfunction名が register_sidebars です。

で次に

    register_sidebars(2);

これはいらない。

そして

    register_sidebar(array(1,

これは関数名も違うし引数の順番も違います。
正しくは第一引数がwidget番号、第二引数がハッシュで表示するwidgetのテンプレート部分です。

実際はこうなります。
if ( function_exists('register_sidebars') ) {
    register_sidebars(1,array(
        'before_widget' => '',
        'after_widget' =>'',
        'before_title' => '',
        'after_title' => '',
    ));
    register_sidebars(2,array(
        'before_widget' => '',
        'after_widget' =>'',
        'before_title' => '',
        'after_title' => '',
    ));
}
まあだけど

修正はめんどくさいけど、テンプレートはいいのがたくさん落ちてるし、
CMSはやっぱり楽でいいですね。