記事一覧をカスタムフィールドの値で絞り込んで取得する方法は検索すれば出てくるのですが、固定ページについては見つけられなかったので記事にしました。
今回何故、固定ページをカスタムフィールドで絞り込む必要があったのかというと、下のページのように会員一覧と会員の個別情報を固定ページで作ってしまったからです。
今回の設計としては、
- 会員毎に、所属地域のカスタムフィールドを設定
- ショートコードを地域毎に記載
- カスタムフィールドで絞り込まれた会員のみが、所属地域に掲載される
という方針としました。
早速コードです。以下のコードを、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 |
//会員一覧 function kaiin($atts) { $args = array( 'post_type'=>'page',//固定ページのみを取得 'orderby' => 'post_date',//日付でソート 'order' => 'ASC',//日付で昇順 'numberposts'=>'-1',//取得件数に制限を設けない 'meta_key' => 'area',//絞り込むカスタムフィールドのキー 'meta_value' => $atts[0],//カスタムフィールドの値 ); $page_list = get_posts($args); foreach($page_list as $page){ setup_postdata( $page ); $name = $page->post_title; $kubun = get_post_meta($page->ID , 'kubun' ,true); $url = get_permalink($page->ID); $print_html .= <<<EOD <tr> <td>{$kubun}</td> <td><a href="{$url}">{$name}</a></td> </tr> EOD; } wp_reset_postdata(); return $print_html; } add_shortcode('kaiin', 'kaiin'); |
このコードを書くにあたって一番はまったのは、固定ページ一覧をカスタムフィールドで絞り込むにあたって、get_pages ではうまくいかなかった所です。
codex には、 meta_key、meta_value が使えると書いてあったのにです。
結果的には、 get_posts が固定ページにも対応しているということが判明したので、 get_posts を使うことにしました。
上のコードでショートコードを生成し、会員一覧ページには、
1 |
[kaiin ka] |
などと記載すればOKです。
会員詳細ページで、
カスタムフィールドのキー: area
カスタムフィールドの値:ka
を設定した会員のみが絞り込まれて一覧に表示されます。
以上です。
参考になれば幸いです。