Индивидуальные методы первой публикации

Кажется, что не существует стандартной методики для дифференциации первых / верхних сообщений. Осмотревшись, я нашел этот метод:

$current_query = new WP_Query('post_type=current&post_status=publish'); // Pull out top/first post $first_post = ( $paged == 0 ) ? $posts[0]->ID : ''; while ($current_query->have_posts()) : $current_query->the_post(); if ($first_post == $post->ID) { echo '<div class="post top-post-special" id="post-' . get_the_ID() . '">'; } else { echo '<div class="post" id="post-' . get_the_ID() . '">'; } 

Это зависит от $ paged (который, кажется, является встроенным WordPress), чтобы добавить класс «верхний пост-специальный» в первый пост, как и ожидалось. Однако при использовании следующего query_post вместо нового экземпляра WP_Query он больше не работает:

 $args=array( 'taxonomy' => 'highlights', 'term' => 'Featured', 'post_type' => 'highlights', ); query_posts($args); $first_post = ( $paged == 0 ) ? $posts[0]->ID : ''; if ( have_posts()) : while (have_posts()) : the_post(); if ($first_post == $post->ID) { echo '<div class="post top-post-special" id="post-' . get_the_ID() . '">'; } else { echo '<div class="post" id="post-' . get_the_ID() . '">'; } 

Я думал, что второй будет аналогичен первому, не уверен, что я здесь делаю неправильно. Есть ли лучший или стандартизованный способ настроить таргетинг на первый пост? Похоже, это придумало бы много.

Solutions Collecting From Web of "Индивидуальные методы первой публикации"

Вам не нужно делать какие-либо специальные запросы для этого. Вот один из способов его достижения.

 /** * conditional check ensures special class only shows on top post on first page. * if you want top post on page 2, etc. to have special class, just set $first_post to true */ if( (int) get_query_var( 'paged' ) > 1 ){ $first_post = false; } else { $first_post = true; } if ( have_posts()) : while (have_posts()) : the_post(); if ( $first_post ) { echo '<div class="post top-post-special" id="post-' . get_the_ID() . '">'; $first_post = false; } else { echo '<div class="post" id="post-' . get_the_ID() . '">'; } 

вы можете изменить одну строку:

 $first_post = ( !is_paged() ) ? $posts[0]->ID : ''; 

или использовать другой подход:

 if ($wp_query->current_post == 0 && !is_paged() ) { echo '<div class="post top-post-special" id="post-' . get_the_ID() . '">'; } else { echo '<div class="post" id="post-' . get_the_ID() . '">'; } 

Более простое решение:

 <?php if (have_posts()) { while (have_posts()) { the_post(); // set class for first post on first page $class = (!is_paged() && $wp_query->current_post === 0) ? 'top-post-special' : ''; ?> <div id="post-<?php the_ID(); ?>" <?php post_class( $class ); ?>> </div> <?php } } ?>