WordPress

wp_dropdown_categoriesのoptionタグのvalue値をカテゴリーIDからslugに変更する方法

ふー。今週の業務も今日で終わりです。
今は職場の昼休み時間。昼食後このエントリーを書きかけています。帰宅した後で仕上げようかな・・・

というわけで、今回のエントリーもWordPress関係です。
カテゴリーの一覧をselectタグで出力してくれる関数「wp_dropdown_categories」のカスタマイズです。

この関数ですが、以下のように普通に使うと、下のようなタグが出力されます。

<select class="postform" name="cat">
<option class="level-0" value="2">Web制作</option>
<option class="level-1" value="5">WordPress</option>
<option class="level-1" value="6">jQuery</option>
<option class="level-1" value="7">PHP</option>
<option class="level-1" value="10">SNS</option>
<option class="level-1" value="12">Blog</option><!-- 以下省略 -->
</select>

ここで出力されるvalue属性のデータは標準ではカテゴリーIDとなります。このvalue値をカテゴリーIDからそのカテゴリーのslugに変更するのが今回紹介するカスタマイズです。

↓こんな感じにしたいのですよ。

<select id="cat" class="postform" name="cat">
<option class="level-0" value="webproduce">Web制作</option>
<option class="level-1" value="wordpress">WordPress</option>
<option class="level-1" value="jquery">jQuery</option>
<option class="level-1" value="php">PHP</option>
<option class="level-1" value="sns">SNS</option>
<option class="level-1" value="blog">Blog</option>
<!-- 以下省略 -->
</select>

valueの値がカテゴリーのslugになっています。

それでは具体的な方法について説明します。

【注意】
このカスタマイズはWordPressのシステムのファイルを変更するものです。作業を行う前に編集対象のファイルのバックアップを取ることをお勧めします。またこのカスタマイズを行った後でWordPressの自動アップデートなどをすると、正常に動作しなくなる可能性があります。

さて、ここで編集するファイルは、

「wp-includes/category-template.php」

というファイルです。
このファイルの958行目以降にある関数「start_el」が変更対象のソースコードです。
標準では↓のようになっています。

function start_el( &amp;$output, $category, $depth = 0, $args = array(), $id = 0 ) {
  $pad = str_repeat(' ', $depth * 3);
  $cat_name = apply_filters('list_cats', $category-&gt;name, $category);
  $output .= "tterm_id.""";
  if ( $category-&gt;term_id == $args['selected'] )
    $output .= ' selected="selected"';
  $output .= '&gt;';
  $output .= $pad.$cat_name;
  if ( $args['show_count'] )
    $output .= '  ('. $category-&gt;count .')';
  $output .= "n";
}

このコードを以下のように修正します。

function start_el( &amp;$output, $category, $depth = 0, $args = array(), $id = 0 ) {
  $pad = str_repeat(' ', $depth * 3);
  $cat_name = apply_filters('list_cats', $category-&gt;name, $category);
  // valueの値でslugを出力
  //$output .= "tterm_id.""";
  $output .= "tslug.""";
  // 選択状態の条件を変更
  //if ( $category-&gt;term_id == $args['selected'] )
  if ($value === (string) $args['selected'] )
    $output .= ' selected="selected"';
  $output .= '&gt;';
  $output .= $pad.$cat_name;
  if ( $args['show_count'] )
    $output .= '  ('. $category-&gt;count .')';
  $output .= "n";
}

コメントアウトした部分がカスタマイズ前のコードです。
ハイライトされている6行目と9行目がカスタマイズのコードです。

このようにすることで、optionタグ内のvalue値にカテゴリーslugを出力することができます。

まだあまり詳しく見ていないのですが、どうやらcategory-template.phpに書かれている、wp_dropdown_categories関係のクラスをoverrideする方法だと、functions.php内での追加記述で同じカスタマイズができるような気がします。このカスタマイズについてはもうちょっと調査を続けてみることにします。

ABOUT ME
アバター
ドレッド
目標必達のために鬼努力を惜しまない個人事業主。フリーライターとWeb制作のお仕事をしています。立命館大学中退。放送大学教養学部の全科履修生。中小企業診断士とFP1級を目指してハードに勉強中。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA