Como marcar cada terceiro post

16

Estou trabalhando em um site WordPress para a minha banda e gostaria de marcar cada post na nossa página do blog para que uma classe especial seja aplicada a ela. Alguém tem alguma indicação de como conseguir isso? Qualquer ajuda é muito apreciada, obrigado! rock n roll.

    
por Zoran 08.03.2012 / 02:21

5 respostas

13

Minha abordagem. Nenhuma função extra, nenhum 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' : '' ); ?>>
    
por fuxia 09.03.2012 / 00:24
8

Como complemento à @helgathevikings answer

Use o post_class () fn sem poluir o namespace global

  1. O uso de variáveis static dentro de uma classe permite o mesmo comportamento de variáveis globais: elas permanecem no lugar e não mudam, a menos que você não as altere.
  2. Ainda melhor (como @Milo sugerido nos comentários), pegue a postagem atual da classe DB.
O exemplo:
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' );

Atualizar

Podemos utilizar a propriedade current_post do objeto global $wp_query . Vamos usar uma função anônima , com a palavra-chave use , para passar o global $wp_query por referência ( PHP 5.3 + ):

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

    return $classes;
} );

Mais adiante, poderíamos restringi-lo ao loop principal com um in_the_loop()     

por kaiser 08.03.2012 / 15:38
3

se o seu tema usa post_class () para gerar postagens que você pode tentar. Eu não tenho 100% de certeza de como ele vai lidar com paginação b / c Eu não tenho posts suficientes na minha instalação local para testar

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;

 }
    
por 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;
    
por kaiser 08.03.2012 / 02:30
1

Também há maneiras de fazer isso com CSS e javascript.

Com o CSS3, você segmenta cada terceira postagem com um seletor de filho / mãe.

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

Ou com o jQuery, você pode adicionar a classe CSS usando a mesma técnica.

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