Limitando query_posts para 1, independentemente da postagem fixa?

4

Como parte do modelo da minha página inicial, usando o padrão query_posts, estou retirando 1 postagem (estilizada usando uma parte de conteúdo diferente), depois um anúncio e depois o resto das postagens. Isso funciona bem, exceto quando alguém define uma postagem como pegajosa, quando o loop com um posts_per_page definido como 1, extrai 2.

Como posso obter o loop dele para mostrar apenas 1 postagem, seja a mais recente ou a mais alta, mas não ambas (o que eu entendo é o comportamento esperado)? Atualmente tenho:

    <?php 
$posts_per_page = get_option('posts_per_page');
$num_featured_posts = 1;

query_posts(array('posts_per_page' => $num_featured_posts)); ?>

  <?php if ( have_posts() ) : ?>

    <?php while ( have_posts() ) : the_post(); ?>

      <?php get_template_part( 'content', 'super' ); ?>

    <?php endwhile; ?>

  <?php elseif ( current_user_can( 'edit_posts' ) ) : ?>

    <?php get_template_part( 'no-results', 'index' ); ?>

  <?php endif; ?>

Obrigado,

UPDATE: Depois de chamar explicitamente apenas uma postagem, independentemente dos status fixos, e excluí-la do loop principal de postagens, meu loop principal agora duplica uma postagem em páginas subsequentes (a última torna-se a primeira na página 2). O deslocamento está me causando dores de cabeça e geralmente interrompe a paginação facilmente - existe outra maneira de corrigir / adicionar isso:

  wp_reset_query();
  $args = array(
    'post__not_in' => array($first_sticky_post),
    'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),        
  );
  //query_posts( $args );
  $main_loop = new WP_Query( $args );

... para redefinir onde o loop deve começar nas páginas > 1?

Você pode ver isso em ação aqui: n2.project14.co.uk

Obrigado,

    
por Luc Pestille 07.10.2012 / 17:41

1 resposta

3

$GLOBALS['wp_query']->found_posts fornecerá o número de postagens.

$GLOBALS['wp_query']->posts é uma matriz com todas as postagens encontradas.

Então, em vez de while ( have_posts() ) : the_post(); use:

setup_postdata( $GLOBALS['wp_query']->posts[0] );
get_template_part( 'content', 'super' );

Desta forma, você não percorre todos os posts, você realmente usa apenas um.

E, por favor, leia Quando você deve usar WP_Query vs query_posts () vs get_posts ()?

    
por fuxia 07.10.2012 / 17:55