WordPressカテゴリ(都道府県・市町村)インポートとカテゴリ検索


WordPressでカテゴリとして「都道府県・市町村一覧」を一括インポートさせる為のXMLファイルと、カテゴリ定義部分のXMLを生成用のExcelファイルを作成しました。今回は作業記録として記載します。

概要

カテゴリとして全国都道府県・市町村一覧(階層構造)をインポートし、カテゴリはチェックボックス一覧として表示します。これらカテゴリは検索項目となるようにしました。

内容

カテゴリ一覧を登録する

作成したインポートファイルを使用して、都道府県・市町村一覧をカテゴリ登録しました。カテゴリは以下のような構造です。

    全国
      +--- 都道府県
                +--- 市町村             

カテゴリ一覧を取得するfunctionを作る

とりさんのソフト屋さん」の記事を参考に「全国-都道府県-市町村」の順(term_id昇順)で取得する関数をfunction.phpへ記載します。「全国」のterm_idが13だったので13以下を指定しています。

/* --------------------------------------
カテゴリ一覧取得
 ---------------------------------------*/
function get_all_category_all() {
	if ( ! $cat_all = wp_cache_get( 'all_category_all', 'category' ) ) {
		// 指定カテゴリ以下取得
		$cat_all = get_terms( 'category', 'fields=all&child_of=13&orderby=id&hide_empty=0' );
		wp_cache_add( 'all_category_all', $cat_all, 'category' );
	}
	return $cat_all;
}

カテゴリ一覧を表示する

WordPressフォーラム「カテゴリをチェックボックスにし複数選択したい」を参考に、カテゴリ一覧取得&表示箇所を以下のように書き換えました。

  $cats = get_all_category_all();
  $prev_parent = 0; // 前カテゴリの親term_id
  
  echo "<ul>";
  foreach($cats as $cat) :
    $id = "cat-" . $cat->term_id;
    if($cat->parent == 13){ // 都道府県名
       // 親IDが初回(0)でなく、前回の親ID=13以外なら市町村リスト終了
      if($prev_parent > 0 && $prev_parent != 13){
        echo "</p></li>";
      }
      echo "<label for=' . $id . '>$cat->name</label>";
    }else{
       // 前回の親ID=13なら市町村リスト開始
      if($prev_parent == 13){
        echo "<li><p>";
      }
      echo '<label for="' . $id . '">' . '<input type="checkbox" value="' . $cat->term_id . '" name="category[$id]" id="' . $id . '" />'. $cat->name . '</label>';
    }
    $prev_parent = $cat->parent; // 前の親term_idを保存

  endforeach;
  echo "</ul>";

ファイル

ファイル公開はしていません。