Intereting Posts
Создайте плагин из WordPress WordPress, показывающий экран установки после ошибки max_questions Удалить ссылку редактирования сообщения со статической главной страницы Добавить меню администратора внутри объекта Construct или Init Получение сбоя при использовании filemtime () с wp_enqueue_style Получить последний элемент из wpdb в виде строки Как удалить пользователя с сайта MU, когда пользователь удален со своего сайта? Блокировать несколько категорий из блога Почему добавление существующей электронной почты пользователя никогда не было получено? Разрешения для файлов и каталогов Могут ли пользовательские таксономии отображаться внутри настраиваемого мета-поля? Сообщение дублируется с помощью цикла foreach WordPress, отображающий миниатюры по вертикали Как можно подключить плагин к концу каждого выдержки? Почему публикация publish_ {custom-post-type} при обновлении?

Как отметить каждый третий пост

Я работаю над сайтом WordPress для своей группы, и я бы хотел отметить каждый 3-й пост на нашей странице блога, чтобы применить к нему специальный класс, у кого-нибудь есть указатели на то, как этого добиться? Любая помощь очень ценится, спасибо! рок-н-ролл.

Мой подход. Нет дополнительной функции, нет фильтра. 🙂

<?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' : '' ); ?>> 

Как дополнение к @helgathevikings ответ

Используйте post_class () fn, не загрязняя глобальное пространство имен

  1. Использование static переменных внутри класса допускает то же поведение, что и глобальные переменные: они остаются на месте и не меняются, если вы их не изменяете.
  2. Еще лучше (как предложил @Milo в комментариях), возьмите текущую запись из класса DB.

Пример:

 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() .

если ваша тема использует post_class () для создания почтовых классов, которые вы могли бы попробовать. Я не уверен на 100%, как он будет обрабатывать pagination b / ci, не хватает сообщений на моей локальной установке, чтобы проверить это

 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; } 
 $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; 

Существуют также способы сделать это с помощью 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"); });