Ответы:
Мой подход. Нет дополнительной функции, нет фильтра. :)
<?php $GLOBALS['wpdb']->current_post = 0; ?>
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->current_post % 3 ? 'third' : '' ); ?>>
Альтернатива:
<div <?php post_class( 0 === ++$GLOBALS['wpdb']->wpse_post_counter % 3 ? 'third' : '' ); ?>>
Notice: Undefined property: wpdb::$current_post in
В дополнение к ответу @helgathevikings
staticпеременных внутри класса допускает то же поведение, что и наличие глобальных переменных: они остаются на месте и не изменяются, если вы их не изменяете.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' );
Мы могли бы использовать current_postсвойство глобального $wp_queryобъекта. Давайте используем анонимную функцию с useключевым словом для передачи глобального $wp_queryпо ссылке ( PHP 5.3+ ):
add_filter( 'post_class', function( $classes ) use ( &$wp_query )
{
0 === $wp_query->current_post %3 AND $classes[] = 'YOUR CLASS';
return $classes;
} );
Далее мы можем ограничить его главным циклом с помощью in_the_loop()условной проверки.
$wpdb->current_post?
если ваша тема использует post_class () для генерации классов записей, вы можете попробовать. я не уверен на 100%, как он справится с нумерацией страниц. У меня недостаточно сообщений на моей локальной установке, чтобы проверить его
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;
}
staticvar вместо a, globalчтобы сохранить пространство имен в чистоте. В любом случае: +1.
$wpdb->current_postбез необходимости создания другой переменной.
Есть также способы сделать это с помощью CSS и JavaScript.
С помощью CSS3 вы нацеливаетесь на каждый третий пост с помощью селектора nth-child.
article.post:nth-child(3n+0)
{
background-color: #777;
}
Или с jQuery, вы можете добавить класс CSS, используя ту же технику.
jQuery(function($) {
$( "article.post:nth-child(3n+0)" ).addClass("custom-class");
});