更新 2020 / 10 / 05

記事をランダム表示-重複しないよう-

posts_orderby フィルターにフックさせる関数内で get_query_var からページ番号を取得すると PHP だけで実装可能

functions.phpに記述

参考:https://teratail.com/questions/192647

function.php


                  <?php

                  function session_start_on_init() {
                      session_name( 'seed' );
                      session_start();
                  }
                  add_action( 'init', 'session_start_on_init' );

                  function order_posts_randomly( $orderby, $query ) {
                      if ( ! $query->is_main_query() ) {
                          return $orderby;
                      }

                      $paged = 0 === get_query_var( 'paged', 0 ) ? 1 : get_query_var( 'paged', 1 );
                      $seed = isset( $_SESSION['seed'] ) ? $_SESSION['seed'] : null;

                      if ( ( empty( $seed ) || 1 === $paged ) ) {
                          $seed = rand();
                          $_SESSION['seed'] = $seed;
                      }

                      return 'RAND(' . $seed. ')';
                  }
                  add_filter( 'posts_orderby', 'order_posts_randomly', 10, 2 );
                  ?>