この記事は、「カテゴリーアーカイブを使った講師一覧」や「サブカテゴリーを使った講師の絞り込み」から、さらにカスタムフィールドの値を使って絞り込む方法について記したものです。
概要
例えば、講師の「年代(20代、30代)」のような抽出条件は、時間の経過とともに年令が増加するため「カテゴリー」での分類には向かないかもしれません。そこで、各講師の紹介記事にカスタムフィールドで「誕生日」を追加し、URLパラメータで「年代」が指定されたときだけ絞り込み条件に加えるようにします。
スクリーンショット
手順
各講師の紹介記事に、カスタムフィールド 'birth' を追加し、誕生日(例:'1990/04/20')を入力して投稿します。
URLパラメータで「年代」の指定があったとき(例:20代なら 'age=20' など)は、カスタムフィールド 'birth' の日付がその年代に該当するかを 'meta_query' で条件指定します。
例 http://example.com/category/teacher/?age=20 など
下記のコードを「functions.php」に追加します。
/*
* 「講師(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] となります。
/**
* [ショートコード]年令表示
*/
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);
}
関連記事





コメントを残す