Петля внутри петли

Я работаю над проектом, где мне нужно отображать 2 сообщения из одной категории, а также мне нужно поставить еще один цикл между этой пост-почтой, чтобы отобразить случайный список сообщений из другой категории. Самый простой способ сделать это – создать 3 запроса, но когда я создал 2 запроса для одной категории, но здесь у меня возникла проблема с одним перерывом в циклах и отображением обоих сообщений, второй работает нормально. Я использовал параметр offset для второго запроса, но он не работает.

<?php $first_query_args = array( 'category_name' => 'first-category', 'tag' => 'special-tag', 'post_per_page' => 1, ); $first_query = new WP_Query( $first_query_args ); if ( $first_query->have_posts() ) : while ( $first_query->have_posts() ) : $first_query->the_post(); // First query stuff goes here endwhile; endif; wp_reset_query(); // Query for Random posts $query_for_random_args = array( 'category_name' => 'cat-for-rand', 'post_per_page' => 3, 'orderby' => 'rand', ); $query_for_random = new WP_Query( $query_for_random_args ); if ( $query_for_random->have_posts() ) : ?> <ul> <?php while ( $query_for_random->have_posts() ) : $query_for_random->the_post(); ?> <li> <?php if ( has_post_thumbnail() ) { ?> <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail( 'list-image' ); ?></a> <a href="<?php the_permalink(); ?>" ><?php the_title(); ?></a> </li> <?php } endwhile; ?> </ul> <?php endif; wp_reset_query(); ?> <?php $second_query_args = array( 'category_name' => 'first-category', 'tag' => 'special-tag', 'offset' => 1, 'post_per_page' => 1, ); $second_query = new WP_Query( $second_query_args ); if ( $second->have_posts() ) : while ( $second_query->have_posts() ) : $second_query->the_post(); // Second query stuff goes here endwhile; endif; ?> 

(Этот код Что я использую для этих циклов)

Любые идеи, как я могу решить эту проблему? или как я могу использовать 2 запроса для аналогичной задачи?

ура

Джордж

Solutions Collecting From Web of "Петля внутри петли"

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

 \\ code modify main Loop to return only 2 posts goes here $firstpost = true; if ( have_posts() ) : while ( have_posts() ) : the_post(); \\ main Loop Post output goes here if ( $firstpost ) { $randomposts = get_posts( array( 'category' => $categoryid, 'numberposts' = $numberposts, 'orderby' => 'rand' ); \\ Output ad-hod Loop content, eg ?> <ul> <?php foreach ( $randomposts as $randompost ) { ?> <li><a href="<?php echo get_permalink( $randompost->ID ); ?>"><?php echo $randompost->post_title; ?></a></li> <?php } ?> </ul> <?php } $firstpost = false; // end the main Loop endwhile; endif; 

(Неисследованный пример кода)