特定のカスタムフィールドを持つ記事を一覧で表示させる

f:id:ozzwar:20130307141400j:plain
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にカテゴリーを指定した。


この方法があれば、色々な絞り込みが出来るようになる。