WordPress のカスタムフィールドの値で記事をソートする方法

WordPress のカスタムフィールドの値で記事をソートすることが可能です。

例えばまず参考に、最近記事の一覧にして出力するコードがあります。

1
2
3
4
5
6
$recent = new wp_query();
$recent->query('post_type=post&showposts=10');
while($recent->have_posts()) {
	$recent->the_post();
	echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}

これに手を加えて説明しましょう。優先度の高い記事上位10件を表示する一覧を作ります。
カスタムフィールドでキーを priority とし、優先度 000~100 で全ての記事に入力したとします。

その記事を取り出すコードが以下になります。

1
2
3
4
5
6
$recent = new wp_query();
$recent->query('post_type=post&showposts=10&orderby=meta_value&meta_key=priority&order=DESC')');
while($recent->have_posts()) {
	$recent->the_post();
	echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
}

もちろん WordPress 3.0 から使えるようになったカスタム投稿タイプでも使えます。
プロジェクトというカスタム投稿タイプを作り、カスタムフィールドで progress というキーに 000~100 で進捗状況を入力します。
そして、以下のコードで進捗状況が高いものほど上に表示されるようになります。

1
2
3
4
5
6
7
8
9
10
$loop = new wp_query();
$loop->query('post_type=project&orderby=meta_value&meta_key=progress&order=DESC');
while($loop->have_posts()) {
	$loop->the_post();
	$progress = get_post_custom_values('progress');
		echo '<h2>' . get_the_title() . '</h2>';
		echo apply_filters('the_content', get_the_content());
		echo '<div class="progress">' . abs($progress[0]) . '%</div>';
	}
}

このブログの右側進捗状況はこのコードを応用して作っています。
ソートについて調べる機会があったのでメモしておきます。

ちなみに今回参考にさせていただいた記事は以下です。
WordPress › フォーラム » 投稿をカスタムフィールド値でソートし、更に時系列に並べる
query_postsで指定できるパラメーター | WordPress | understandard.net

コメント

  1. ゲンドウさんのコメント

    カスタムフィールドでの並び替え参考になりました!
    決まったフォーマットの記事を検索した場合、
    カスタムフィールドの並び替えがしたかったので助かりました^^

  2. pyon-yonさんのコメント

    はじめまして。今やりたいことがあって、とても参考になる記事です。
    が、php初心者ですので、自分のテンプレートにどう組み込んでよいか解りません。
    そこで、ぜひ、手ほどきをお願いしたく存じます。
    製品情報(トップレベル)
     A群(2階層レベル)
      A-a群(3階層レベル)
        個別商品記事
        ・・・・・・・・・・・
      A-b群
       以下も同様
    というようなカテゴリー構成にしたサイトにおいて、
    カテゴリー・アーカイブページ(2階層アーカイブと3階層アーカイブ)を
    表示するページが出来ます。ここで、ソートボタンを設置して、このページ
    の記事リストをソートする機能を追加したいのです。
    具体的には、アーカイブページの右上と右下などに、
    リストボックスを設置して、選択枝として
    カスタムK名称(降順)
    カスタムK名称(昇順)
    カスタムL名称(降順)
    カスタムL名称(昇順)
    ・・・以下同様
    を選択すると、同じテンプレートを使ってソート結果が出るようにしたいのです。
    このためには、今回のコードを、テーマtwentytenのcategory.phpの場合で言うと、どの部分に、どう入れたらよいでしょうか?

    以上、どうかよろしくお願いいたします。

  3. keiさんのコメント

    pyon-yonさん

    そのような質問は、WordPressのフォーラムでされた方がよいと思いますよ!
    http://ja.forums.wordpress.org/

    こちらのブログは管理人さんがお一人で対応されていますし、該当記事と直接関係ない内容まで回答するのはかなり負担になるかと思います。
    一方、フォーラムでは全国のWordPressの猛者たちが集まっているので堂々と質問できますよ!

    困ったらCodex、それでだめならフォーラムへ。これWPerの正しいたしなみです!

  4. pyon-yonさんのコメント

    keiさん
    承知しました。