Заметки для меня и коллег. Темы — разработка, продвижение сайтов, заработок в интернете.

Случайные отзывы на главной странице WP

Исходные данные:

Сайт на WordPress, создан новый тип записей (вакансии), через ACF добавлена возможность для каждой вакансии добавлять отзывы людей трудоустроенных по этой вакансии. Появилась необходимость выводить небольшое количество случайных отзывов из разных вакансий.

Один из путей решения:

  1. Пройти по всем вакансиям, выбрать из них все отзывы и поместить в массив.
  2. Случайным образом выбрать из массива N позиций и вывести их.
// устанавливаем количество выводимых отзывов
$number_of_reviews_displayed = 3;

// выбираем все отзывы из вакансий
$args = array( 'post_type' => 'oferty_pracy' );
$main_page_reviews = new WP_Query($args);
if ($main_page_reviews->have_posts()) : while ($main_page_reviews->have_posts()) : $main_page_reviews->the_post();
    if( get_field('vacansii_reviews_gallery') ) {
        while( has_sub_field('vacansii_reviews_gallery') ) {
            $all_reviews_massive[] = '<div class="ark_feed">
                 <div class="ark_photo">
                     <div class="photo" style="background-image: url('.get_sub_field('vacansii_review_userphoto').')"></div>
                 </div>
                 <div class="ark_text">
                     <div class="title">'.get_sub_field('vacansii_review_name').'</div>
                     <div class="date">'.get_sub_field('vacansii_review_date').'</div>
                     <div class="description">'.get_sub_field('vacansii_review_text').'</div>
                 </div>
             </div>';
        }
    }
    endwhile;
endif;
wp_reset_postdata();

// выбираем все отзывы со страницы с отзывами о компании
if( get_field('reviews', 373) ) {
    while( has_sub_field('reviews', 373) ) {
        $all_reviews_massive[] = '<div class="ark_feed">
             <div class="ark_photo">
                 <div class="photo" style="background-image: url('.get_sub_field('review_image').')"></div>
             </div>
             <div class="ark_text">
                 <div class="title">'.get_sub_field('review_name').'</div>
                 <div class="date">'.get_sub_field('review_date').'</div>
                 <div class="description">'.get_sub_field('review_text').'</div>
             </div>
         </div>';
    }
} 

// общее количество отзывов
$all_reviews_count = count($all_reviews_massive);

// получаем нужное количество случайных записей
$all_reviews_counts_massive = array_flip(range(1, $all_reviews_count));
$reviews_massive_number = array_rand($all_reviews_counts_massive, $number_of_reviews_displayed);

// выводим случайные записи в соответствии с генератором
for( $i=0; $i<($all_reviews_count); $i++ )
{
    echo $all_reviews_massive[$reviews_massive_number[$i]];
}

 


Комментарии к статье