web-dev-qa-db-fra.com

Limiter query_posts à 1, quel que soit le post collant?

Dans le cadre de mon modèle de page d'accueil, en utilisant les query_posts standard, je sors un post (stylé à l'aide d'un autre content_part), puis une annonce, puis le reste des posts. Cela fonctionne très bien, sauf lorsque quelqu'un définit une publication comme étant collante, lorsque la boucle avec une publication posts_per_page définie sur 1 tire à 2.

Comment puis-je obtenir sa boucle pour ne jamais afficher qu'un seul post, soit le dernier, OR le haut collant, mais pas les deux (ce que je comprends être le comportement attendu)? Actuellement j'ai:

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

Merci,

UPDATE: Après avoir explicitement appelé 1 publication, quels que soient les statuts collants, et exclue celle-ci de la boucle principale des publications, ma boucle principale duplique désormais une publication des pages suivantes (le dernier en date). on devient premier à la page 2). Offset me cause des maux de tête et casse généralement la pagination facilement. Existe-t-il un autre moyen de corriger/ajouter à ceci:

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

... pour réinitialiser où la boucle doit commencer sur les pages> 1?

Vous pouvez le voir en action ici: n2.project14.co.uk

Merci,

4
Luc Pestille

$GLOBALS['wp_query']->found_posts vous donnera le nombre de messages.

$GLOBALS['wp_query']->posts est un tableau avec tous les articles trouvés.

Donc, au lieu de while ( have_posts() ) : the_post();, utilisez:

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

De cette façon, vous ne parcourez pas toutes les publications, vous en utilisez une.

Et s'il vous plaît lire Quand devriez-vous utiliser WP_Query vs query_posts () vs get_posts ()?

3
fuxia