WordPress – 記事をランダム表示させる(プラグインなし)
プラグインなしで記事一覧をランダム表示させるにはテンプレートタグのget_posts
を使用することで実装可能です。他にもquery_posts
というタグでもランダム表示させることも可能ですが、メインのループに影響を与えてしまう恐れがあるので注意が必要です。
一方のget_posts
はメインループに影響を与えず、直接データベースにクエリを作成するので複数のループを使うのであればこちらが無難かと思います。
get_posts()タグを使用してランダムに表示させる
今まで投稿の中からランダムで5件の記事を取得してタイトルを表示させる(ページ遷移対応)設定になっています。
<ul class="rand_contents">
<?php
$rand_posts = get_posts(array(
'posts_per_page' => 5,
'post_type' => 'post',
'orderby' => 'rand'
));
foreach($rand_posts as $post) : setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endforeach;
wp_reset_postdata();
?>
</ul>
パラメーターについて
- posts_per_page‥表示させる件数の上限を設定しています。上記の例だと5件まで表示。
- post_type‥投稿のタイプを設定しています。上記の場合は「投稿(post)」から引っ張ってきています。その他にも「attachment」「page」「カスタム投稿タイプ」があります。
- orderby‥上記の設定だとランダムで取得。他にも更新日や特定の作成者などあります。
特定のカテゴリーのみを取得してランダム表示させる
この場合は先程のコードにcategory_name
のパラメータを追加し、表示させたいカテゴリーのスラッグ名を指定するだけです。
下のコードではWordPressというカテゴリーのみを取得してランダムで5件まで表示させる実装になっています。
<ul class="rand_contents">
<?php
$rand_posts = get_posts(array(
'posts_per_page' => 5,
'post_type' => 'post',
'category_name' => 'wordpress',
'orderby' => 'rand'
));
foreach($rand_posts as $post) : setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endforeach;
wp_reset_postdata();
?>
</ul>
カテゴリーのスラッグ名の確認方法
管理画面にアクセスして「投稿」→「カテゴリー」に移動します。
そしたらカテゴリー一覧が表示されているので、取得したいカテゴリーのスラッグ名を'category_name' => '',
に埋め込みます。下の画像例だと'category_name' => 'css',
となります。
'category_name' => 'CSS',
だと間違いなので注意してください。必ず、スラッグ名の通り入力。