obtenha as últimas 5 postagens e uma publicação específica e classifique em uma ordem específica

Procuro alguns conselhos sobre como criar uma galeria de imagens. É um pouco especial uma galeria, porque eu exibiria as últimas 5 postagens e uma publicação fixa, para um total de 6 posts, em uma ordem específica. ou seja, o post fixo deve ser o terceiro da lista. O único método que eu acredito é possível criar 3 loops, o primeiro a ver as últimas duas postagens, a segunda para exibir a publicação fixa (por id) e a terceira para ver outras últimas três postagens. Algo assim (provavelmente não está correto):

have_posts() ) : $my_query->the_post(); $do_not_duplicate = $post->ID; ?>   have_posts() ) : $my_query2->the_post(); ?>   have_posts() ) : $my_query3>the_post(); if ( $post->ID == $do_not_duplicate ) continue; // don't show the same post of the first loop ?>   

Existe uma maneira diferente de fazer isso sem fazer muitos laços, considerando que já existe um na página?

obrigado

Solutions Collecting From Web of "obtenha as últimas 5 postagens e uma publicação específica e classifique em uma ordem específica"

Não consigo pensar em uma maneira de obter as últimas 5 postagens mais uma específica em uma única consulta sem usar o SQL.

Se você não se importa em usar duas perguntas, acho que essa seria uma maneira fácil de fazer o que você pretende:

 //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; 

Estou usando get_posts() mas você pode usar WP_query com segurança em seu lugar.

O WordPress já lida com duplicatas possíveis no post__in , o que seria o caso se a publicação que deseja inserir é uma das últimas 5.

Uma maneira seria usar o contador embutido para contar quantas vezes você passou pelo loop e, em seguida, use get_post no ID de postagem fixa, depois de ter passado 3 vezes …

  < ?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; ?> 

Veja a referência de desenvolvedor wordpress para get_post para mais detalhes …

(Código editado para usar o contador embutido conforme a sugestão de Milo nos comentários.)