Técnicas personalizadas de primera publicación

2

No parece haber una técnica estándar para diferenciar las primeras / mejores publicaciones. Después de mirar alrededor, encontré este método:

$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() . '">';
}

Esto se basa en $ paginado (que parece ser un Wordpress integrado) para agregar la clase "top-post-special" en la primera publicación como se esperaba. Sin embargo, cuando se utiliza el siguiente query_post en lugar de una nueva instancia de WP_Query, ya no funciona:

$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() . '">';
}

Pensé que el segundo sería análogo al primero, no estoy seguro de lo que estoy haciendo mal aquí. ¿Hay una manera mejor o estandarizada de apuntar a la primera publicación? Parece que esto subiría mucho.

    
pregunta boomturn 09.04.2012 - 05:12

3 respuestas

4

No deberías necesitar hacer ninguna consulta especial para esto. Aquí hay una forma de lograrlo

/**
 * 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() . '">';
}
    
respondido por el aaronwaggs 09.04.2012 - 06:30
2

puede cambiar la línea a:

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

o utilice un enfoque diferente:

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() . '">'; 
} 
    
respondido por el Michael 09.04.2012 - 14:51
0

Una solución más 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
    }
}
?>
    
respondido por el joeljoeljoel 09.04.2012 - 16:14

Lea otras preguntas en las etiquetas