Шорткод для отображения миниатюры и ссылки для 3 случайных сообщений


Я хочу, чтобы в верхней части страницы был небольшой заголовок, показывающий рекомендуемые изображения со ссылкой на соответствующий пользовательский тип публикации.

Это мой код:

// Creates random image header within tax called(defaults to residential).
add_shortcode( 'rt-random-projects', 'rt_random_projects' );
function rt_random_projects($atts) {
  $a = shortcode_atts( array(
      'category' => 'residential',
     ), 
    $atts 
    );
  $query = new WP_Query(
    array(
      'post_type' => 'jf_projects',
      'posts_per_page' => '3',
      'orderby' => 'RAND',
      'tax_query' => array(
        array(
          'taxonomy' => 'project_types',
          'field' => 'slug',
          'terms' => $a['category'],
        )
      )
    )
  );
  $count = $query->post_count;
  $projects  ='<div>';
  while ( $query->have_posts() ) : $query->the_post();
        $projects .= '<div class="projectheaderimg"><a href="'.get_the_permalink().'">'.get_the_post_thumbnail('','small').'</a></div>';
  endwhile;  //end while posts
  $projects .='</div>';
  wp_reset_postdata();

  // Code
  return $projects;
}

При этом появляются мои изображения и ссылки на сообщения, но это не случайно. Независимо от того, что я делаю, он все равно показывает только те же 3 сообщения. Как я могу заставить его вытащить 3 случайных сообщения?

Author: rudtek, 2019-03-13

2 answers

Начиная с версии WordPress 4.5, вы можете использовать RAND(seed) с параметром orderby.

Однако, когда значение просто RAND (т.Е. Верхний регистр rand), WP_Query игнорирует его и по умолчанию использует сортировку по умолчанию (по дате публикации).

Я подтвердил это, проверив $query->request:

  1. С помощью 'orderby' => 'RAND' предложение ORDER BY является ORDER BY wp_posts.post_date DESC.

  2. С помощью 'orderby' => 'rand' предложение ORDER BY является ORDER BY RAND().

Таким образом, решение заключается в просто: Всегда используйте rand, если только вы не хотите использовать семя .

 2
Author: Sally CJ, 2019-03-14 11:46:56

Более чем вероятно, что это проблема с вашим хостом. Многие известные хостинговые компании, управляемые WP, по умолчанию отключают случайный порядок. Если они хороши (WPEngine), вы можете обратиться к их поддержке и включить ее. Если они отстой (Боже мой), вам может не повезти с этой просьбой.
Если это так, то вам нужно будет написать функцию, чтобы получить все сообщения, присвоить каждому случайное число, а затем упорядочить их по этому номеру и выбрать таким образом верхние n сообщений. Который именно так медленно и плохо, как это звучит.

 0
Author: mrben522, 2019-03-13 20:06:08