WordPress:記事をランダムに表示してページナビ(WP-PageNavi)では固定する方法

ページャーの2ページ目以降も全記事からランダムなので、確率的に 1ページ目と同じ記事が表示されると困ります。 そこでページャーではランダムを固定する方法を紹介します。 下記のコードをfunctions.phpに書きます。

乱数のシードとして現在の時刻(ただし分と秒はゼロで固定し 1時間毎に変わる)を利用しています。
そのため、このコードでは1時間ごとにランダムがリセットされます。

function category_rand_orderby( $orderby, $query ){
    if ( !is_admin() && $query->is_main_query() ) {
        if ( $query->is_category() ) {
            $seed = strtotime( date( 'Y-m-d H:00:00' ) );
            mt_srand( $seed );
            $orderby = 'RAND(' . mt_rand() . ')';
        }
    }
    remove_filter( current_filter(), __FUNCTION__ );
    return $orderby;
}
 
add_filter( 'posts_orderby', 'category_rand_orderby', 10, 2 );

参考サイト

WordPress 記事をランダムに表示してページングする方法

category cloud