特定のカスタムフィールドを持つ記事を一覧で表示させる
WordpressのCustom Field Templateを使ってカスタムフィールドに値を入れたとき、
ある値を含む記事を一覧で表示させたくなった。(画像は関係なし!)
ゴール
ブログ内に以下の様な記事があるとする。
- 記事A
- カテゴリー:new
- key:music
- value:metal
- 記事B
- カテゴリー:new
- key:music
- value:punk
- 記事C
- カテゴリー:old
- key:music
- value:metal
- 記事D
- カテゴリー:old
- key:music
- カスタムフィールド:punk
…
...
ゴールとしてはサイドメニューに
===
- カテゴリーnew
- metal
- punk
- カテゴリーold
- metal
- punk
===
の様にリンクを張り、記事一覧ページ(category.php)にリンクさせたい。
ちなみに「サブカテゴリーにすればいいじゃない。」という声もあるけど、あえて今回はこれを実装する。
1.該当するカテゴリー独自のテンプレートファイルを作成する
まずカテゴリー1の記事が一覧で表示されるカテゴリーのテンプレートファイルを作成。
category-new.php
の様にスラッグやIDを追加してあげればOK
2.URLのクエリを取得して応じて記事一覧を表示
下記の様なURLを作り、URLの?以降のクエリを「$_GET」に格納して、それをもとにkeyやvalueを出力している。
$_GETをquery_postsに渡してあげる事で、metalの記事一覧表示できるようにする
hogehoge.com/new/?key=music&value=metal
このURLをサイドメニューに張ってあげる。
category-new.phpの内容は以下。(cat=○を入れるのを忘れずに)
<?php get_header(); ?> <?php query_posts('cat=○&posts_per_page=10&meta_key=' . $_GET['key'] . '&meta_value=' . $_GET['value']); if(have_posts()) : while(have_posts()) : the_post(); ?> <p><a href="<?php the_permalink();?>"><?php the_title(); ?></a></p> <?php endwhile; endif; wp_reset_query(); get_footer(); ?>
ただ、この方法を書いたら、カテゴリー2の「key:music、value:metal」も一緒に出力されてしまったためquery_postsにカテゴリーを指定した。
この方法があれば、色々な絞り込みが出来るようになる。