php: 10分毎にランダム表示する方法 

10分毎にランダム表示をさせました。

10分間は変数が変わらないでいる必要があるので、1時間ごとに代わる変数に+数字をしています。

if文の場合で秒数に変換して計算しています。

function category_rand_orderby($orderby, $query){
  if ( !is_admin() && $query->is_main_query()) {
    if ( $query->is_post_type_archive('interview') || $query->is_post_type_archive('kigyo_kobetsu100')) {
        $seed_hour = strtotime(date('Y-m-d H:00:00'));//1時間ごとに変わる
        $seed = strtotime(date('Y-m-d H:i:00'));//1分ごとに変わる
        $calc = $seed - $seed_hour;


        if ($calc <= 600) {
          mt_srand($seed_hour+1);
          $orderby = 'rand(' . mt_rand() . ')';
        } elseif ( $calc <= 1200) {
          mt_srand($seed_hour+2);
          $orderby = 'rand(' . mt_rand() . ')';
        } elseif ( $calc <= 1800) {
          mt_srand($seed_hour+3);
          $orderby = 'rand(' . mt_rand() . ')';
        } elseif ( $calc <= 2400) {
          mt_srand($seed_hour+4);
          $orderby = 'rand(' . mt_rand() . ')';
        } elseif ( $calc <= 3000) {
          mt_srand($seed_hour+5);
          $orderby = 'rand(' . mt_rand() . ')';
        } elseif ( $calc <= 3600) {
          mt_srand($seed_hour+6);
          $orderby = 'rand(' . mt_rand() . ')';
        }

    }
  }
  
  remove_filter( current_filter(), __FUNCTION__ );
  return $orderby;
}
 
add_filter( 'posts_orderby', 'category_rand_orderby', 10, 2 );

まったく同じ動きでswitchを利用した場合

何分かを取得し、その一桁目の数字で10分20分30分...60分を判断しています。

function category_rand_orderby($orderby, $query){
  if ( !is_admin() && $query->is_main_query()) {
    if ( $query->is_post_type_archive('interview') || $query->is_post_type_archive('kigyo_kobetsu100')) {
        $seed_hour = strtotime(date('Y-m-d H:00:00'));//1時間ごとに変わる
        $seed = strtotime(date('Y-m-d H:i:00'));//1分ごとに変わる
        $calc = date('i');
        var_dump($calc);

        $calc_set = substr($calc,0 ,1);
        var_dump($calc_set);

        switch ($calc_set) {
          case 1:
            mt_srand($seed_hour+1);
            $orderby = 'rand(' . mt_rand() . ')';
            break;
          case 2:
            mt_srand($seed_hour+2);
            $orderby = 'rand(' . mt_rand() . ')';
            break;
          case 3:
            mt_srand($seed_hour+3);
            $orderby = 'rand(' . mt_rand() . ')';
            break;
          case 4:
            mt_srand($seed_hour+4);
            $orderby = 'rand(' . mt_rand() . ')';
            break;
          case 5:
            mt_srand($seed_hour+5);
            $orderby = 'rand(' . mt_rand() . ')';
            break;
        }

    }
  }
  
  remove_filter( current_filter(), __FUNCTION__ );
  return $orderby;
}
 
add_filter( 'posts_orderby', 'category_rand_orderby', 10, 2 );

何か時間おきに並び替えが発生するときなどお役に立てれば幸いです。

category cloud