この記事は2年以上前に書かれた記事です。現状にそぐわないかもなのでご注意を。

[WP] カテゴリー/カスタム分類を検索オプションに指定する

検索オプションとして、カテゴリー/カスタム分類(カスタムタクソノミー)を検索オプションに指定する方法です。

まずはカスタムタクソノミーを設定。

functions.php

function cook_time_taxonomies() {
     register_taxonomy(
          'cooktime', //作成するタクソノミーのスラッグ
          'post', //どの投稿タイプに紐付けるか
          array(
               'hierarchical' => true,
               'label' => '調理時間'
          )
     );
}
add_action( 'init', 'cook_time_taxonomies', 0 );

次に、カスタム分類を検索対象にできるように検索対象を拡張するプラグインを導入。

Search Everything

※カスタムフィールド等、通常検索対象にできないものも検索対象にできてとっても便利。

カテゴリーを検索オプションに追加

< ?php wp_dropdown_categories(array(
	'show_option_none' => 'ジャンル',
	'hide_empty' => 0
)); ?>

カスタム分類を検索オプションに追加

<select name="cooktime" id="cooktime" class="postform form-control">
<option value="">調理時間</option>
< ?php
	$terms = get_terms('cooktime','hide_empty=0');
	foreach ($terms as $term): ?>
	<option value="<?php echo esc_attr($term->slug); ?>" < ?php if ($_GET['cooktime'] == esc_attr($term->slug)) { print 'selected="selected"'; } ?>>< ?php echo esc_html($term->name); ?></option>
	< ?php endforeach; ?>
</select>

おまけ)カスタム分類のチェックボックス(複数指定)をラジオボタン(一つだけ指定)に変更。

add_action( 'admin_print_footer_scripts', 'select_to_radio_cooktime' );
function select_to_radio_cooktime() {
    ?>
    <script type="text/javascript">
    jQuery( function( $ ) {
        // 投稿画面
        $( '#taxonomy-cooktime input[type=checkbox]' ).each( function() {
            $( this ).replaceWith( $( this ).clone().attr( 'type', 'radio' ) );
        } );
         
        // 一覧画面
        var cooktime_checklist = $( '.cooktime-checklist input[type=checkbox]' );
        cooktime_checklist.click( function() {
            $( this ).parents( '.cooktime-checklist' ).find( ' input[type=checkbox]' ).attr( 'checked', false );
            $( this ).attr( 'checked', true );
        } );
    } );
    </script>
< ?php
}

先達の皆様に多謝!!

スポンサーリンク