表題のとおりでカスタム投稿タイプのカスタムフィールドの値でにエントリーを表示を変えたいという要望があったので対応してみました。
仕様
- 投稿済みのエントリーから選択したものをおすすめメニューとして一覧に表示したい。
- おすすめメニューは「ランチコース」と「ディナーコース」があってそれぞれ10件表示したい。
- コース一覧の並び順は任意に指定したい。
使用しているプラグイン
- Custom Field Suite
並び替えの条件
- Custom Field Suite
並び替えの条件
orderbyにmeta_value_numとすると数値で並び替えができるみたい。(WordPress3.0以降?)
meta_keyに対象となるカスタムフィールド名を設定。
並び替えはカスタムフィールド「recommended-course」を基準とする。フィールドタイプはコンボボックスで、値は「-,1,2,3,4,5,6,7,8,9,10」デフォルトは「-」
order(並び替え)はASC(昇順)
抽出条件
カスタムフィールド「course-division」の値が「ランチコース」でカスタムフィールド「recommended-course」の値が「-」以外の記事をrecommended-courseで設定した値を基に昇順で表示する。
<h2>おススメコース</h2>
<?php
$args = array(
'post_type' => 'menu',
'posts_per_page' => 10,
'orderby' => 'meta_value_num',
'meta_key' => 'recommended-course',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'course-division',
'value' => 'ランチコース',
'compare' => '='
),
array(
'key' => 'recommended-course',
'value' => '-',
'compare' => '!=',
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<h2 class="entryTitle"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<?php the_content(__('more')); ?>
<?php wp_link_pages( array( 'before' => '<div class="page-link">Pages', 'after' => '</div>' ) ); ?>
</div>
<?php endwhile; ?>