こんにちは!コーダーのゆうしです。
WordPressのサイトで「関連記事をランダムに表示したい」「毎回違う順番でスタッフ一覧を見せたい」という場面、たまにありますよね。WP_Queryの orderby パラメータに 'rand' を指定するだけで簡単に実装できます。この記事ではランダム表示の実装方法と、合わせて知っておくと便利な orderby のパラメータ一覧を紹介します。
実装コード
<?php
$paged = get_query_var('paged');
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'paged' => $paged,
'orderby' => 'rand', // ランダム順で表示
);
$my_query = new WP_Query($args);
if ( $my_query->have_posts() ) :
while ( $my_query->have_posts() ) : $my_query->the_post();
?>
<!-- ループの中身をここに記述 -->
<?php
endwhile;
else :
?>
<p>まだ投稿がありません。</p>
<?php
endif;
wp_reset_postdata();
?>ポイントは 'orderby' => 'rand' の1行だけです。これを追加するだけでページを読み込むたびに投稿がランダムな順番で表示されます。
post_type や posts_per_page はサイトに合わせて変更してください。カスタム投稿タイプに使う場合は post_type をそのスラッグに変更します。
ランダム表示を使う場面
実務でよく使う場面としてはこんなケースがあります。
- スタッフ・メンバー紹介:毎回違う順番で表示することで特定のスタッフが常に上位に来ない公平な表示ができる
- お客様の声・事例紹介:ページを開くたびに違う事例が目に入るので、複数の実績を均等にアピールできる
- 関連記事・おすすめ記事:ランダム表示にすることで同じ記事ばかり表示されるのを防げる
orderとの組み合わせ
orderby と合わせて order パラメータを指定することで昇順・降順を切り替えられます。
$args = array(
'orderby' => 'date',
'order' => 'DESC', // 降順(新しい順)
);order の値 | 内容 |
|---|---|
| ‘DESC’ | 降順(大きい→小さい、新しい→古い) |
| ‘ASC’ | 昇順(小さい→大きい、古い→新しい) |
orderby が 'rand' の場合は order の指定は不要です。
orderbyパラメータ一覧
よく使う orderby の値をまとめました。
| 値 | 並び替えの基準 |
|---|---|
| ‘date’ | 投稿日(デフォルト) |
| ‘modified’ | 更新日 |
| ‘title’ | タイトル(文字列順) |
| ‘ID’ | 投稿ID |
| ‘rand’ | ランダム |
| ‘menu_order’ | 管理画面上の表示順(並び替えプラグインと組み合わせて使うことが多い) |
| ‘comment_count’ | コメント数 |
| ‘author’ | 著者 |
| ‘parent’ | 親投稿・親ページ |
| ‘none’ | 順序なし |
| ‘meta_value’ | カスタムフィールドの値(文字列順)。meta_key の指定が必要 |
| ‘meta_value_num’ | カスタムフィールドの値(数値順)。meta_key の指定が必要 |
複数の条件で並び替える
orderby には配列を渡すことで複数の条件を組み合わせられます。
$args = array(
'orderby' => array(
'menu_order' => 'ASC',
'date' => 'DESC',
),
);この例では menu_order の昇順を優先し、同じ値の場合は date の降順で並び替えます。
meta_valueで並び替える例
カスタムフィールドの値で並び替えたい場合は meta_key と合わせて使います。
$args = array(
'orderby' => 'meta_value_num',
'meta_key' => 'price', // ACFで設定したフィールド名
'order' => 'ASC', // 安い順
);商品一覧を価格順で並び替えたいときなどに活用できます。
躓きやすいポイント
ランダム表示でページネーションがおかしくなる
orderby => 'rand' はページを読み込むたびに順番が変わります。そのためページネーションで2ページ目に移動すると1ページ目と同じ投稿が表示されてしまうことがあります。ページネーションと組み合わせる場合は rand ではなく別の orderby を使うか、セッションを使って順番を固定する対策が必要です。
meta_valueで並び替えが効かない
meta_key の指定が漏れているか、フィールド名が間違っている場合に起こります。ACFで設定したフィールド名と完全一致している必要があります。数値で並び替えたい場合は meta_value ではなく meta_value_num を使ってください。
まとめ
WP_Queryの orderby に 'rand' を指定するだけで投稿をランダム表示できます。関連記事・スタッフ紹介・おすすめ記事など、毎回違う順番で見せたいコンテンツに活用してみてください。orderby の他のパラメータも合わせて覚えておくと投稿の並び替えが自由自在になります。
ご不明な点やコーディングのご依頼はお問い合わせからお気軽にどうぞ。

