Clase post_class alterna en cada publicación
Necesito tener una clase alterna (par, impar...) en las publicaciones para proporcionar resaltados alternos en una columna. Lo mejor sería adjuntar esto a post_class() para que esté en cada instancia de post_class(). A continuación está el código que tengo en este momento para lograr este efecto.
<?php
// configurando otras variables para categorías alternas
$style_classes = array('even', 'odd');
$style_counter = 0;
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class="<?php $k = $style_counter%2; echo $style_classes[$k]; $style_counter++; ?>">
<?php the_cotent(); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>

Debes agregar el siguiente código en functions.php
:
add_filter ( 'post_class' , 'my_post_class' );
global $current_class;
$current_class = 'odd';
function my_post_class ( $classes ) {
global $current_class;
$classes[] = $current_class;
$current_class = ($current_class == 'odd') ? 'even' : 'odd';
return $classes;
}
Esto asegura que todas las publicaciones impares en la página tendrán la clase 'odd' y todas las publicaciones pares tendrán la clase 'even' simplemente usando post_class()
en tu tema.

Esto funciona, pasa la clase adicional a post_class()
:
<?php $c = 0; ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div <?php post_class((++$c % 2 === 0) ? 'odd' : 'even'); ?>>
<?php the_content(); ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
EDITADO: Aquí hay una forma que crea una versión de post_class()
que llevará un conteo en la página. Ahora, usará un nuevo nombre, oddeven_post_class()
pero funciona como deseas. Todo lo que necesitas hacer es agregar esto en functions.php
:
/* Agrega este bloque en functions.php */
class MyCounter {
var $c = 0;
function increment(){
++$this->c;
return;
}
function oddOrEven(){
$out = ($this->c % 2 === 0) ? 'odd' : 'even';
$this->increment();
return $out;
}
}
$my_instance = new MyCounter();
function post_class_oddeven() {
global $my_instance;
ob_start();
post_class($my_instance->oddOrEven());
$str = ob_get_contents();
ob_end_clean();
echo $str;
}
/* fin del bloque */
Para llamarlo, usa post_class_oddeven()
en tu tema donde normalmente usarías post_class()

Sí, eso sigue siendo solo una variación de la solución anterior. Puede que no haya sido claro, pero estoy buscando una solución que iría en el archivo functions.php y luego simplemente pasarla a cualquier instancia de post_class(). Así no tendría que modificar todas las instancias individuales de los loops donde necesito esto.

Tengo otra solución si quieres añadir una clase específica a diferentes contenidos. Por ejemplo, solo al bucle:
add_filter( 'post_class', 'my_post_class' );
function my_post_class( $classes ) {
if ( ! is_single() ) {
global $wp_query;
// Añade clase "par" o "impar" si no es un contenido único
$classes[] = $wp_query->current_post % 2 == 0 ? 'even' : 'odd' ;
}
return $classes;
}
Porque no quieres añadir la clase "even" o "odd" cuando se muestra un contenido único.
