この記事は 2013年10月 の投稿で、現在では状況が異なる可能性があります。
この記事は、「カテゴリーアーカイブを使った講師一覧」や「サブカテゴリーを使った講師の絞り込み」から、さらにカスタムフィールドの値を使って絞り込む方法について記したものです。
概要
例えば、講師の「年代(20代、30代)」のような抽出条件は、時間の経過とともに年令が増加するため「カテゴリー」での分類には向かないかもしれません。そこで、各講師の紹介記事にカスタムフィールドで「誕生日」を追加し、URLパラメータで「年代」が指定されたときだけ絞り込み条件に加えるようにします。
スクリーンショット
手順
各講師の紹介記事に、カスタムフィールド 'birth' を追加し、誕生日(例:'1990/04/20')を入力して投稿します。
URLパラメータで「年代」の指定があったとき(例:20代なら 'age=20' など)は、カスタムフィールド 'birth' の日付がその年代に該当するかを 'meta_query' で条件指定します。
例 http://example.com/category/teacher/?age=20 など
下記のコードを「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); } } } } } } |
ちなみに、下記のコードを「functions.php」に追加すると、このカスタムフィールド 'birth' の日付から講師の「年令」を計算し、講師紹介の記事中に表示することができます。
記事中に挿入するショートコードは、[olb_show_age] となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * [ショートコード]年令表示 */ add_shortcode( 'olb_show_age', 'olb_show_age' ); function olb_show_age($atts, $content = null){ global $post; $birth = get_post_meta($post->ID, 'birth', true); if(empty($birth)) { return; } $b = (int) str_replace('/', '', $birth); return (int) ((date('Ymd')-$b)/10000); } |
関連記事
コメントを残す