アーカイブでランダム+ページャーつけると2ページ目以降で重複したり、抜けたりする
アーカイブページでコンテンツにあまり新鮮さが関係なくランダムで表示したい場合がある。
そのときに単純にWordPressで準備されているランダム表示を利用しようと思ったが、ページャーもついていると、2ページ目以降で1ページめのコンテンツが表示されたり、一回も表示されないコンテンツが出てきたりする。
原因はランダムにする際のシードが各ページで違うためである。
そこで、シードを一定時間固定して、一定時間経過後再度ランダムになると行ったシードにすることで、この問題を解決した。
//1時間おきにランダム表示
function category_rand_orderby( $orderby, $query ){
if ( !is_admin() && $query->is_main_query() ) {
if ( is_post_type_archive('jobs') ) {//ここでポストタイプを選択
$seed = strtotime( date( 'Y-m-d H:00:00' ) );//1時間おきにseed変更
mt_srand( $seed );
$orderby = 'RAND(' . mt_rand() . ')';
}
}
return $orderby;
}
add_filter( 'posts_orderby', 'category_rand_orderby', 10, 2 );
コメント