WordPressの勉強がてら

WordPressの初心者が独学でホームページ作成したときの技術メモ

WordPressの勉強がてら

「Events Manager」の検索フォームにカスタム分類(カスタムタクソノミー)フィールドを追加する

      2015/06/08

イベントカレンダーのプラグイン「Events Manager」には絞り込み検索ができる検索フォームが標準で搭載されています。

検索条件は
・キーワード
・日付
・カテゴリ
・場所でそれぞれ指定できます。

でもさらに絞り込み条件を追加したいことがあると思います。そのやり方として、「イベント属性」を使うやり方と、「カスタム分類(カスタムタクソノミー)」を使うやり方の2通りあります。ここではカスタム分類を使ったやり方を紹介します。

 

カスタム分類を作成

ここでは「Custom Post Type UI」を使ってカスタム分類を作成します。使い方はこちら。例として「音楽」を追加してみます。

「Custom Post Type UI」をインストールし、新規追加を選択し、下記のように右側のエリアを入力します。
・分類名:music
・ラベル:音楽
・利用する投稿タイプ:「イベント」にチェック
・階層(Advanced Optionsをクリックすると表示される):「True」に変更
「カスタム分類作成」ボタンをクリック

すると、「イベント」メニューに「音楽」が追加されるので、ここでは「ロック」「クラシック」「ジャズ」を追加してみます。

 

イベントを投稿

カスタム分類を作成すると、イベント投稿画面に「音楽」メニューが追加されます。

「カテゴリ」と同じようにチェックを入れることができます。まだこれだけでは検索フォームにメニューは表示されません。

 

function.phpにコードを追加

検索フォームに「音楽」の絞り込みを表示されるには下記のコードの追加が必要です。

function music_search_form(){
    $music = (is_array(get_option('music'))) ? get_option('music'):array();
    ?>
    <!-- START music Search -->
     <div class="em-search-teacher em-search-field">
     <label>音楽</label>
     <select name="music" id="music_search">
        <option value="" selected="selected">全ての音楽</option>
        <?php
        $taxonomies = array('music');
        $args = array('orderby'=>'count','hide_empty'=>true);
        echo get_terms_dropdown($taxonomies, $args, 'music');
        ?>
    </select>
    </div>
    <!-- END music Search -->

    <?php
}
add_action('em_template_events_search_form_footer','music_search_form');

function my_em_music_event_load($EM_Event){
    global $wpdb;
    $EM_Event->music = $wpdb->get_col("SELECT term_taxonomy_id FROM $wpdb->term_relationships WHERE object_id='{$EM_Event->post_id}'", 0    );
}
add_action('em_event','my_em_music_event_load',1,1);

function my_em_music_get_default_search($searches, $array){
    if( !empty($array['music']) ){
        $searches['music'] = $array['music'];
    }
    return $searches;
}
add_filter('em_events_get_default_search','my_em_music_get_default_search',1,2);

function my_em_music_events_get($events, $args){
    if( !empty($args['music'])  ){
        foreach($events as $event_key => $EM_Event){
            if( !in_array($args['music'],$EM_Event->music) ){
                unset($events[$event_key]);
            }
        }
    }
    return $events;
}
add_filter('em_events_get','my_em_music_events_get',1,2);

function get_terms_dropdown($taxonomies, $args, $taxo_name){
    $myterms = get_terms($taxonomies, $args);

    foreach($myterms as $term){
        $term_name =$term->name;
        $value = $term->term_id;
        $temp = ((array_key_exists($taxo_name, $_POST)) && $_POST[$taxo_name] == $value) ? 'selected="selected"':'';
        $output .= "<option value='" .$value. "'".$temp.">" .$term_name. "</option>";
    }

return $output;
}

 

これで完了。

検索フォームを確認

以上で作業完了です。ではさっそく画面を確認してみます。

検索フォームに「音楽」メニューが追加されました。これをちょっと応用すれば絞り込み条件を複数追加していくことができます。

やっぱりイベントのプラグインはEvents Managerが一番好きかな。

 

その他Events Managerの記事
・「Events Manager」プラグイン を使ってイベントカレンダーを作成する
・「Events Manager」の検索フォームにイベント属性フィールドを追加する
・「Events Manager」でオリジナルのプレースホルダーを追加する
・「Events Manager」の絞り込み検索ページへリンク(条件込み)を張る方法 
・「Events Manager」の絞り込み検索フォームのリストの順序を変更する方法
・「Events Manager」で現在開催中のイベントを示すプレースホルダーを作成する

 - WordPress

  • このエントリーをはてなブックマークに追加

  関連記事

wordpress情報
ログイン画面のロゴを変更

クライアントに納品するようなサイトはWordPressのログイン画面のロゴをオリ …

wordpress情報
「Events Manager」で現在開催中のイベントを示すプレースホルダーを作成する

以前に「Events Manager」でオリジナルのプレースホルダーを追加するに …

wordpress情報
「Events Manager」でオリジナルのプレースホルダーを追加する

便利なイベントカレンダープラグイン「Events Manager」ですが、フォー …

wordpress情報
「Events Manager」の絞り込み検索ページへリンク(条件込み)を張る方法

イベントカレンダーに欠かせないプラグイン「Events Manager」。今回は …

wordpress情報
管理画面(ダッシュボード)のメニューの表示/非表示を手動で操作する方法

Webサイト作成後、クライアントに引き渡すとき、管理画面から不要なメニューは表示 …

wordpress情報
ショートコードやタグを登録して簡単に呼び出す

WordPressの記事を登録するときショートコードやタグなど手で打つのはめんど …

wordpress情報
Contact Form 7の初期値をクエリストリングから取得する

お問い合わせフォームを作成するときよく使うプラグイン「Contact Form …

wordpress情報
会員専用ページをつくる

会員専用ページをつくるにあたり、いろいろなプラグインがある。今回クライアントの要 …

wordpress情報
カスタムフィールドの値をOR条件で抽出

カスタム投稿を作成した時に、カスタムフィールドの条件をOR条件で抽出したかったり …

wordpress情報
「Events Manager」の検索フォームにイベント属性フィールドを追加する

以前「Events Manager」の検索フォームにカスタム分類のフィールドを追 …