今回は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でのカスタム投稿の並び順とその際のページングについてお伝えしました。