• カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook
  • カミナリインスタグラムカミナリinstagram

山陰の情報を発信するカミナリ

ナビ

16

MARCH

ウェブMONDAY 2020 / 3 / 16

コピペで超簡単!!投稿(カスタム投稿可)の管理画面をカスタムタクソノミーで絞り込めるようにする!

Text by Shinji Sato

  • カミナリツイッターカミナリtwitter
  • カミナリフェイスブックカミナリfacebook

こんにちは。

佐藤です。

 

 

 

wordpressでサイトを構築中にカスタムタクソノミーを使うことって結構ありますよね。

そして投稿の数が増えてくると(もしくは量が多くなることが想定される場合)設定したカスタムタクソノミーで投稿を絞り込みたくなる時って結構あると思います。

 

いつも必要だと思った場合に都度設定していたのですがだんだん面倒になってきたので簡単に設定できるようになる関数を作成しました。
 

せっかくなので共有します。

 

 

という訳で以下を「function.php」にコピペしましょう。

 

function add_custom_post_refine($my_post_type,$args = null){

  if(is_string($args)){
    $taxonomy_array = array(
      $args,
    );
  }else{
    $taxonomy_array = $args;
  }

  if(is_string($my_post_type) && !empty($taxonomy_array)){
    add_filter('custom_post_refine',function($my_array) use($my_post_type,$taxonomy_array){
      $my_array[$my_post_type] = $taxonomy_array;
      return $my_array;
    });
  }
}

function add_custom_post_restrict(){
  global $post_type;

  $my_array = array();
  $my_array = apply_filters('custom_post_refine',$my_array);

  if(!empty($my_array)){
    foreach($my_array as $my_post_type => $my_taxonomys){
      if($post_type == $my_post_type){

        $html = '';
        foreach($my_taxonomys as $my_taxonomy){

          $my_taxonomy_datas = get_taxonomies(array('name'=>$my_taxonomy),'objects');

          $html .= <<<EOT
          <input type="hidden" name="taxonomy" value="{$my_taxonomy}">
          <select name="term">
            <option value="">{$my_taxonomy_datas[$my_taxonomy]->label}一覧</option>
EOT;

          $parent_terms = get_terms($my_taxonomy,array('parent'=>0));

          foreach($parent_terms as $parent_term){

            $html .= "<option value=\"{$parent_term->slug}\">{$parent_term->name}</option>";
            $terms = get_terms($my_taxonomy,array('parent'=>$parent_term->term_id));

            foreach($terms as $term){
              $html .= "<option value=\"{$term->slug}\">- {$term->name}</option>";
            }

          }

          $html .= '</select>';
        }

        echo $html;
      }
    }
  }
}
add_action('restrict_manage_posts', 'add_custom_post_restrict');

 

あとは簡単。

function.phpで関数「add_custom_post_refine()」を呼び出し、引数に投稿タイプのスラッグとタクソノミーのスラッグを与えてやれば実装できます。

 

/*
第一引数に投稿タイプのスラッグ(string)
第二引数にタクソノミーのスラッグ(string)
*/

/* 使用例1: */
add_custom_post_refine('products','product_category');
//  ※投稿タイプ「products」の一覧画面でタクソノミー「product_category」で絞り込めるようにする。

/* 使用例2: */
add_custom_post_refine('products',array('product_category1','product_category2'));
//  ※タクソノミーは配列でも指定できます。

 

佐藤真司隠しプロフィール画像

TEXT by

佐藤 真司さとうしんじ)

1990年 鳥取県米子市生まれ。
株式会社マジックワード フロントエンドエンジニア。

この人が書いた他の記事を読む