Il ne semble pas y avoir de technique standard pour différencier les premiers/premiers postes. Après avoir regardé autour de moi, j'ai trouvé cette méthode:
$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() . '">';
}
Cela repose sur $ paged (qui semble être un script Wordpress intégré) pour ajouter la classe "top-post-special" dans le premier post comme prévu. Cependant, lorsque vous utilisez le query_post suivant au lieu d'une nouvelle instance de WP_Query, cela ne fonctionne plus:
$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() . '">';
}
Je pensais que le second serait analogue au premier, je ne suis pas sûr de ce que je fais mal ici. Existe-t-il un moyen plus efficace ou standard de cibler le premier message? On dirait que cela reviendrait souvent.
Vous ne devriez pas avoir besoin de faire de requêtes spéciales pour cela. Voici un moyen d'y parvenir
/**
* 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() . '">';
}
vous pouvez changer la ligne en:
$first_post = ( !is_paged() ) ? $posts[0]->ID : '';
ou utilisez une approche différente:
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() . '">';
}
Une solution plus simple:
<?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
}
}
?>