Шорткод для отображения миниатюры и ссылки для 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 случайных сообщения?
2 answers
Начиная с версии WordPress 4.5, вы можете использовать RAND(seed)
с параметром orderby
.
Однако, когда значение просто RAND
(т.Е. Верхний регистр rand
), WP_Query
игнорирует его и по умолчанию использует сортировку по умолчанию (по дате публикации).
Я подтвердил это, проверив $query->request
:
С помощью
'orderby' => 'RAND'
предложениеORDER BY
являетсяORDER BY wp_posts.post_date DESC
.С помощью
'orderby' => 'rand'
предложениеORDER BY
являетсяORDER BY RAND()
.
Таким образом, решение заключается в просто: Всегда используйте rand
, если только вы не хотите использовать семя .
Более чем вероятно, что это проблема с вашим хостом. Многие известные хостинговые компании, управляемые WP, по умолчанию отключают случайный порядок. Если они хороши (WPEngine), вы можете обратиться к их поддержке и включить ее. Если они отстой (Боже мой), вам может не повезти с этой просьбой.
Если это так, то вам нужно будет написать функцию, чтобы получить все сообщения, присвоить каждому случайное число, а затем упорядочить их по этому номеру и выбрать таким образом верхние n сообщений. Который именно так медленно и плохо, как это звучит.