レッスン予約システムについてのメモです。
特定のカテゴリ(およびその子カテゴリ)のカテゴリーアーカイブの中で、カスタムフィールドの値を使ってさらに絞り込むため、'meta_query' を使ってみました。
例えば、講師の「年代(20代、30代)」のように、時間の経過とともに変化する値にもとづいた分類には「カテゴリー」を使いづらいため、カスタムフィールドの「誕生日」から年代を判定して絞り込むようにしたかったのです。
まず、講師カテゴリ(スラッグ名: teacher)に投稿した講師紹介記事に、カスタムフィールド 'birth' を追加し、誕生日(例:'1990/04/20')を入力して投稿します。
「年代」の指定にはURLパラメータを使い、20代なら 'age=20' のようにします。
例 http://example.com/category/teacher/?age=20 など
URLパラメータで「年代」の指定があったときは、カスタムフィールド 'birth' の日付がその年代の10年間に該当するかを 'meta_query' で条件指定します。
下記のコードを「functions.php」に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
/* * 「講師(teacher)」とそのサブカテゴリだけ1ページ当たりの記事数を3件にする * 「age(年代)」の指定があれば 'meta_query' でカスタムフィールド 'birth' も検索する */ add_action('pre_get_posts', 'category_teacher_per_page'); function category_teacher_per_page($wp_query){ if(!is_admin()) { if($wp_query->is_main_query()){ if($wp_query->is_category()){ $c = get_category($wp_query->query['cat']); while($c->parent){ $c = get_category($c->parent); if($c->slug == 'teacher'){ break; } } if($c->slug == 'teacher'){ $wp_query->set('posts_per_page', 3 ); // 20代,30代,40代の指定があった場合 if(isset($_GET['age']) && in_array($_GET['age'], array(20, 30, 40))) { $y = date('Y'); $m = date('m'); $d = date('d'); $start = date('Y/m/d', mktime(0, 0, 0, $m, $d+1, $y-$_GET['age']-10)); $end = date('Y/m/d', mktime(0, 0, 0, $m, $d, $y-$_GET['age'])); $meta = array( array( 'key' => 'birth', 'value' => array($start, $end), 'compare' => 'BETWEEN', 'type' => 'DATE', ) ); $wp_query->set('meta_query', $meta); } } } } } } |
参考にした記事
- query_postsを捨てよ、pre_get_postsを使おう【追記あり】【報告あり】 | notnil creation weblog
- query_posts(WP_Queryクラス)でカスタムフィールドを使う:WordPress私的マニュアル
コメントを残す