LOADING

BLOG

HOME > BLOG > 技術 > PHP > WordPress > WordPressでカスタム投稿をランダム順に表示する方法

WordPressでカスタム投稿をランダム順に表示する方法

PHPWordPress技術

今回はWordPressにおけるカスタム投稿の並び順の操作について、特にランダムな並び順の設定とその際のページングの扱い方についてお伝えします。

カスタム投稿をランダムに並べ替える方法

WordPressでは、カスタム投稿のメインループもランダム順に変更することが可能です。具体的には、pre_get_postsアクションを使用してクエリのパラメータを変更します。

以下に、カスタム投稿タイプ(例:'your_custom_post_type')のメインループをランダム順にするためのコードを示します:

function custom_order_for_custom_post_type($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    if (is_post_type_archive('your_custom_post_type')) {
        $query->set('orderby', 'rand'); 
        return;
    }
}
add_action('pre_get_posts', 'custom_order_for_custom_post_type');

このコードは、カスタム投稿タイプ'your_custom_post_type'のアーカイブページのメインループをランダム順に変更します。ただし、'your_custom_post_type'の部分は、対象となるカスタム投稿タイプのスラッグに置き換えてください。

ランダム順のページングについて

ただし、投稿をランダムに並べる場合、ページングに一考する必要があります。ランダム順で表示される投稿は、ページをリロードする度に変わります。そのため、2ページ目以降に移動した際には、1ページ目で見た投稿と重複することがあります。

一方で、この現象を避けるためには、一度に全ての投稿を表示する方法が考えられます。しかし、投稿数が多いとページの読み込み時間が長くなるため、ユーザビリティが損なわれる可能性があります。

全投稿を一度に表示する方法

全投稿を一度に表示するには、posts_per_pageパラメータを-1に設定します。これにより、1ページに全ての投稿が表示されます。以下のコードを参考にしてください:

function custom_order_for_custom_post_type($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }

    if (is_post_type_archive('your_custom_post_type')) {
        $query->set('orderby', 'rand');
        $query->set('posts_per_page', -1); // 全投稿を一度に表示
        return;
    }
}
add_action('pre_get_posts', 'custom_order_for_custom_post_type');

以上、WordPressでのカスタム投稿の並び順とその際のページングについてお伝えしました。