WordPressでは投稿記事とは別に固定ページを作ることができますが、カテゴリーやタグがつけられません。
このサイトのWorkページを作る際、サイドバーにカテゴリーごとにページリストを作ろうと思ったのですが、ページを分類するカテゴリーやタグが付けられないためページを増やすごとにサイドバーにも追加しなければならなくなってしまいます。
今回はそういった問題を解決する方法としてカスタムフィールドによるカテゴリー付けを紹介します。

この記事には改訂版が存在します。
WordPressの固定ページで擬似的にカテゴリーを使う 改訂版

カスタムフィールドとは、記事にメタデータを付加することができる機能です。
付加したメタデータはテーマファイルの中で利用することができます。

カスタムフィールドを設定する

カスタムフィールド入力欄が表示されていない場合は、投稿編集やページ編集の画面の右上にある表示オプションからカスタムフィールドにチェックを入れて表示されます。

今回はページにカテゴリーをつけるのが目的なので、新規追加を押してNameにcategory、値に任意のカテゴリー名を入力します。

テーマファイルの中にコードを書く

ページの中の表示させたい部分のテーマファイルの中にコードを書いていきます。 例えばサイドバーに、仮にカテゴリー名がmusicの固定ページをリンク付きでリスト表示させたいなら、sidebar.phpに以下のコードを記述します。

$my_query = new WP_Query();
$my_query->query('post_type=page&meta_key=category&meta_value=music');

<?php if ($my_query->have_posts()): ?>

<ul>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>

<?php endif; ?>
<?php wp_reset_query(); ?>

2行目の$my_query->query()は記事(投稿記事や固定ページ)を読み込むための関数です。引数にパラメータを渡すことで条件を絞って記事を読み込むことができます。 ここでカスタムフィールドの値を使って欲しい記事だけを読みこませようというわけです。

サンプルではpost_type=pageで表示する記事を「固定ページ」に限定し、meta_key=category、meta_value=musicでカスタムフィールドの名前がcategory、かつ値がmusicの記事のみにします。

後はループを使って記事情報を1つずつ読み込んでいくだけ。 7行目と9行目に挟まれた部分がそれです。
ここではWordPressのループタグが使えますので、記事のリンクやタイトル、本文も自由に取り出せます。 記事のリンクはthe_permalink()、タイトルはthe_title()、本文はthe_contentで表示することができます。

カスタムフィールドは使わない方は全く使わない機能だと思いますが、色々と応用がきく便利な機能なのでぜひ活用してください。

カスタムフィールドの使い方 – WordPress Codex 日本語版 WordPress カスタムフィールドの活用法:記事の短い紹介文を表示


  1. sgr496 より:

    始めまして。こちらで解決されている課題に当たっておりまして、大変参考になりました!
    一つ質問(というか確認)なのですが、こちらのblogのworkカテゴリでは、右のメニューテンプレート内で、上記ソースをmeta_valueのみ変えながら3個記述することで、それぞれのmeta_value(site,tool,design?)を読み込んでいると理解すればよろしいのでしょうか?

  2. rsuzuki より:

    >sgr496さん
    おっしゃるとおりです。
    ただこのやり方だとmeta_valueの数が多いと記述も多くなるので、meta_valueを適当な配列に入れておき、テンプレートをforeachでまわしながらmeta_valueを変えていったほうが賢いやり方かもしれません。

  3. sgr496 より:

    参考になりました、ありがとうございます。
    早速やってみたいと思います!

  4. horizon58 より:

    とても参考になりました。ありがとうございます。

    ちなみにカテゴリ分けして出力される記事の並び順を昇順にするにはどのように書けばいいでしょうか??

  5. kt より:

    大変申し訳ございません。
    全くPHPがわからず、色々とプラグインも探してここにたどり着いたのですが、お忙しいとは思いますが、ご教示頂ければ幸いです。
    固定ページに記事のひとつのカテゴリだけを表示させたい場合はどうしたら良いのでしょうか?
    上記事を見ますと、サイドバーという事のようですが。。
    何かショートコードで対処できる方法というのは無いのでしょうか?
    解らないものが、質問してすいませんが、固定ページにPHPソースをhtmlタグのところに貼れば実行できるということなのでしょうか?
    ほんとにすいません。