Wordpress – カテゴリ一覧をドロップダウンでonchangeアクションを設定する正しいやり方
※wordpress 2.0.10 用追加 (2007.05.26)
※wordpress 2.0.6 - 2.0.9 まで共通です。 (2007.03.06)
※wordpress 2.0.6 用ファイルを追加。 (2007.01.19)
カテゴリ一覧サイドバーに表示するときに、ドロップダウン表示にするのは、テンプレートタグである dropdown_cats() で簡単に実現できる。
ここで、OnChangeアクションを設定したい場合のやり方がいくつかのサイトで紹介されているが、Internet Explorerなどでうまく表示できなかったというユーザは多いだろう。
そこで、正しいやり方を説明する。
よく紹介されているのは、カテゴリ一覧の部分を以下のようなコードに書き換えるというものだろう
<form name="catform" action="<?php echo $PHP_SELF ?>">
<select name="cat" onchange="submit(this.form)">
<option value=''>Select Category</option>
<?php dropdown_cats(0, '', 'name', 'asc', 0, 1, 1, '', 0, 0); ?>
</select>
</form>
実は、これだけでは足りないのである。 筆者は、Wordpress me 2.0.5 で確認しただけなので、本家版がどうなっているか未確認であるが、たぶん同じ現象で、対応も同じで良いと思われる。
1.以下のように書き換える(上記コードと同様)
<form name=”catform” action=”<?php echo $PHP_SELF ?>” class=”postform”>
<select name=”cat” onchange=”submit(this.form)”>
<option value=”>Select Category</option>
<?php dropdown_cats(0, ”, ‘name’, ‘asc’, 0, 1, 1, ”, 0, 0); ?>
</select>
</form>
2.そのままだとselectタグが重複してしまうので、2カ所ほど書き換える
/wp-includes/template-functions-category.php の以下の行をコメントアウトするか削除する。 (Wordpress me 2.0.10 の場合)
210行目付近: echo “<select name=’cat’ class=’postform’>\n”;
232行目付近: echo “</select>\n”;
実際にこのブログでは使用しているので、トップページなどで確認して欲しい。
3.ダウンロード
書き換えたphpファイルを、zipアーカイブでダウンロードできるようにしたので利用して欲しい
Wordpress 2.0.10 用
Wordpress 2.0.6 – 2.0.9 用
Wordpress 2.0.5 用





Wordpressのフォーラムからとんできました。ありがとうございます。
しかし、うーむ。うまく行きません….
コメントアウトっていうのは、以下のように書き換えればいいのですよね?
エラーが出てうまく表示されません。
$categories = $wpdb->get_results($query);
//echo ”
“;
if ( intval($optionall) == 1 ) {
$all = apply_filters(‘list_cats’, $all);
echo ” $all
“;
}
if ( intval($optionnone) == 1 )
echo ” “.__(‘None’).”
“;
if ( $categories ) {
foreach ( $categories as $category ) {
$cat_name = apply_filters(‘list_cats’, $category->cat_name, $category);
echo ” cat_ID.”"”;
if ( $category->cat_ID == $selected )
echo ‘ selected=”selected”‘;
echo ‘>’;
echo $cat_name;
if ( intval($optioncount) == 1 )
echo ‘ (‘.$category->cat_count.’)';
if ( intval($optiondates) == 1 )
echo ‘ ’.$category->lastday.’/’.$category->lastmonth;
echo ”
“;
}
}
//echo ”
“;
}
ごめんなさい。上記のコメントの表示がおかしいので、もう一度コピペいたします。
$categories = $wpdb->get_results($query);
//echo ”
“;
if ( intval($optionall) == 1 ) {
$all = apply_filters(‘list_cats’, $all);
echo ” $all
“;
}
if ( intval($optionnone) == 1 )
echo ” “.__(‘None’).”
“;
if ( $categories ) {
foreach ( $categories as $category ) {
$cat_name = apply_filters(‘list_cats’, $category->cat_name, $category);
echo ” cat_ID.”"”;
if ( $category->cat_ID == $selected )
echo ‘ selected=”selected”‘;
echo ‘>’;
echo $cat_name;
if ( intval($optioncount) == 1 )
echo ‘ (‘.$category->cat_count.’)';
if ( intval($optiondates) == 1 )
echo ‘ ’.$category->lastday.’/’.$category->lastmonth;
echo ”
“;
}
}
//echo ”
“;
}
なぜか表示が変わってしまうんですが、上記二行目は以下の通りです。何度も本当にごめんなさい!
//echo ”
“;
あらら、やっぱり文字列が変換されてしまいます…. どうしたら良いんだろう….
こんにちわ、どのような状況なんでしょうか?
あと、wordpressのバージョンはわかりますか?
本家版なのか、meなのか、バージョン番号はいくつなのか、など。
バージョンは、ME2.0です。
ご指摘のように書き換えても、エラーが出てページ全体が表示されません。
お手数ですが、もう一度、どのようにコメントアウトしたらいいのか
ご指導いただけませんでしょうか?お願いします!
手順1はOKですか?
手順2のほうかなぁ・・・・
手順2として説明します。
wordpress は me2.0 ですよね?2.0のソースが残っていたので確認しました。
209行、231行が該当行でした。
この行の最初(一番左)に、// (スラッシュ2個でコメントアウトになります)と入れてください。
そして、アップロードしてください。
ご指摘のようにしてみると、
WordPress data error : you have an error in SQL syntax…
というエラーメッセージが、出てしまいます。
何度もすみませんが、どうにかお助けを!!!
サイト、そのままにしてありますので、どうぞ見てやって下さい。お願いします。
http://www.junkoniwa.net/
挿入するコードを間違っているか、template-functions-category.php の修正を間違っていると思われます。
sidebarに挿入するコードは、本文中のものを見ていただくしか無いとして、
template-functions-category.zip はダウンロードできるようにしましたのでご利用下さい。
店長さま、
わざわざダウンロードまで出来るようにして頂き、本当にありがとうございます。
ただ、なぜかうまく行かないのですよ… 本当に頭がいたい。
なので、今回は諦めることとします…. おつきあい頂いてどうもありがとうございました!!
またこれにこりずに、どうぞよろしくお願い致します。
あー、WordPress嫌いになりそう….