Ответы:
Мой подход. Нет дополнительной функции, нет фильтра. :)
<?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;
}
static
var вместо 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");
});