Cómo marcar cada tercera publicación

16

Estoy trabajando en un sitio de WordPress para mi banda y me gustaría marcar cada tercera publicación en nuestro blog para que se aplique una clase especial. ¿Alguien tiene alguna sugerencia sobre cómo lograrlo? Cualquier ayuda es muy apreciada, gracias! rock n roll.

    
pregunta Zoran 08.03.2012 - 02:21

5 respuestas

13

Mi enfoque. Sin función extra, sin filtro. :)

<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>

Alternativa:

<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>
    
respondido por el fuxia 09.03.2012 - 00:24
8

Como una adición a @helgathevikings answer

Use el post_class () fn sin contaminar el espacio de nombres global

  1. Usar las variables static dentro de una clase permite el mismo comportamiento que tener variables globales: permanecen en su lugar y no cambian, a menos que no las alteres.
  2. Aún mejor (como sugirió @Milo en los comentarios), tome la publicación actual de la clase DB.
El ejemplo:
function wpse44845_add_special_post_class( $classes )
{
    // Thanks to @Milo and @TomAuger for the heads-up in the comments
    0 === $GLOBALS['wpdb']->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
}
add_filter( 'post_class','wpse44845_add_special_post_class' );

Actualizar

Podríamos utilizar la propiedad current_post del objeto global $wp_query . Usemos una función anónima , con la palabra clave use , para transmitir el $wp_query global por referencia ( PHP 5.3+ ):

add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
    0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';

    return $classes;
} );

Más adelante, podríamos restringirlo al main loop con un in_the_loop() verificación condicional.

    
respondido por el kaiser 08.03.2012 - 15:38
3

si su tema usa post_class () para generar las clases de publicaciones que podría probar. No estoy 100% seguro de cómo manejará la paginación b / c. No tengo suficientes publicaciones en mi instalación local para probarlo

add_filter('post_class','wpa_44845');

global $current_count;

$current_count = 1;

 function wpa_44845( $classes ){

    global $current_count;

    if ($current_count %3 == 0 ) $classes[] = 'special-class';

    $current_count++;

    return $classes;

 }
    
respondido por el helgatheviking 08.03.2012 - 03:24
2
$i = 0;
if ( have_posts ) :
while( have_posts ) :
    the_post();

    $class = 'class="BASIC-CLASS';
    if ( 0 === ( $i % 3 ) )
        $class .= 'YOUR-SPECIAL-CLASS';
    $class .= '"';

    echo "<div {$class}>";
        // do stuff
    echo '</div>';

    $i++;
endwhile;
endif;
    
respondido por el kaiser 08.03.2012 - 02:30
1

También hay formas de hacer esto con CSS y javascript.

Con CSS3, apuntas a cada tercera publicación con un selector nth-child.

article.post:nth-child(3n+0)
{
    background-color: #777;
}

O con jQuery, puedes agregar la clase CSS usando la misma técnica.

jQuery(function($) {
    $( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});
    
respondido por el rohmann 10.10.2013 - 01:28

Lea otras preguntas en las etiquetas