получить последние 5 сообщений и конкретную запись и отсортировать в определенном порядке

Я ищу несколько советов о том, как создать галерею изображений. это определенная бит галерея, потому что я бы показал последние 5 сообщений и фиксированную запись, в общей сложности 6 должностей, в определенном порядке. т.е. фиксированный пост должен быть третьим в списке. Единственный метод, который, я считаю, можно создать 3 цикла, первый, чтобы увидеть последние два сообщения, второй, чтобы отобразить фиксированную запись (по id), а третий, чтобы увидеть другие последние три сообщения. Что-то вроде этого (скорее всего, это неверно):

<?php $my_query = new WP_Query( 'posts_per_page=2' ); // get the latest 2 posts while ( $my_query->have_posts() ) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?> <?php the_title(); ?> <?php endwhile; ?> <?php $my_query2 = new WP_Query( 'p=1' ); // get fixed post with id=1 while ( $my_query2->have_posts() ) : $my_query2->the_post(); ?> <?php the_title(); ?> <?php endwhile; ?> <?php $my_query3 = new WP_Query( 'posts_per_page=3' ); // get the latest 3 posts while ( $my_query3->have_posts() ) : $my_query3>the_post(); if ( $post->ID == $do_not_duplicate ) continue; // don't show the same post of the first loop ?> <?php the_title(); ?> <?php endwhile; endif; ?> 

Есть ли другой способ сделать это, не делая много циклов, учитывая, что на странице уже есть один?

Спасибо

Solutions Collecting From Web of "получить последние 5 сообщений и конкретную запись и отсортировать в определенном порядке"

Я не могу придумать способ получить последние 5 сообщений плюс конкретный в одном запросе без использования SQL.

Если вы не возражаете использовать два запроса, я думаю, что это будет простой способ сделать то, что вы намереваетесь:

 //Get the latest 5 posts (which happens to be get_posts default 'posts_per_page' value) $posts = get_posts(); //Build up an array with the IDs $latests_posts_ids = wp_list_pluck( $posts, 'ID' ); //Insert the desired ID in the third position $post_id_to_insert = 1; $insert_position = 2; //which equals 3 when starting from 0 array_splice( $latests_posts_ids, $insert_position, 0, $post_id_to_insert ); //Get the posts based on the IDs and do not alter their order $args = array( 'posts_per_page' => 6, 'post__in' => $latests_posts_ids, 'orderby' => 'post__in' ); $posts = get_posts( $args ); //Parse the posts foreach( $posts as $post ) : setup_postdata( $post ); the_title(); endforeach; 

Я использую get_posts() но вы можете безопасно использовать WP_query .

WordPress уже обрабатывает возможные дубликаты в post__in , что было бы, если сообщение, которое вы хотите вставить, является одним из последних 5.

Один из способов – использовать встроенный счетчик, чтобы указать, сколько раз вы прошли через цикл, а затем используйте get_post на фиксированном идентификаторе сообщений, как только вы прошли через 3 раза …

  <?php $my_query = new WP_Query( 'posts_per_page=5' ); // get the latest 5 posts while ( $my_query->have_posts() ) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?> <?php the_title(); ?> <?php if(3 == $my_query->current_post) { $fixed_post = get_post(1); // Do what you need to with $fixed_post... } endwhile; ?> 

См. Ссылку на wordpress для get_post для получения более подробной информации …

(Измененный код для использования встроенного счетчика в соответствии с предложением Майло в комментариях.)