Intereting Posts
Как обновлять плагины с обновлениями базы данных, если я использую svn Как скрыть содержание сообщения / мета из всех, кроме автора сообщения и администратора Добавить HTML в LI wp_list_categories Как проверить, отличается ли строка PHP от мета-поля? Удалить ссылку из сообщений Как отображать сообщения на пользовательской странице без объявления страницы сообщений в настройках чтения? Измените файл PHP родительской темы и сохраните в дочерней теме Auto-realod с новыми сообщениями // Ajax call Где я могу сохранить код виджета для wordpress? Переписать правила для настраиваемого пула сообщений Удаление пользовательских таксономий из меню администратора Пользовательские таксономии делают WP очень медленным – способ исправить? Как получить имя блога при использовании WordPress Multisite Невозможно добавить пользовательскую таксономию в пользовательский тип публикации Ограничить категории персонализированным типом сообщения

Пользовательский запрос с фильтром post_class с использованием current_post не работает

У меня есть новый WP_Query на моей странице архива. У меня также есть фильтр post_class, который условно добавляет first класс, поэтому я могу отображать их в строках по 3 надёжно.

Это фильтр post_class

 function sm_inline_post_class( $classes ) { global $wp_query; if( 0 == $wp_query->current_post || 0 == $wp_query->current_post % 3 ) $classes[] = 'first'; return $classes; } add_filter( 'post_class', 'sm_inline_post_class' ); 

Это отлично подходит для запроса по умолчанию, но first класс не применяется к сообщениям из моего пользовательского запроса.

Как вы условно применяете почтовые классы к записям из пользовательских запросов?

Вы используете глобальный $wp_query не свой пользовательский запрос. Либо объявляйте свой глобальный, как global $wp_query_archives а затем используйте его в sm_inline_post_class , осознавая недостатки использования глобальных переменных или выполняйте небольшую работу следующим образом:

 $class = sm_inline_post_class( array(), $my_custom_query ); 

И затем передайте $class в качестве первого аргумента для вашего вызова post_class (я полагаю, вы используете эту функцию на своей странице архива).

Затем измените функцию sm_inline_post_class следующим образом:

 function sm_inline_post_class( $classes, $query = null ) { global $wp_query; $query = ( $query == null ) ? $wp_query : $query; if( 0 == $query->current_post || 0 == $query->current_post % 3 ) { $classes[] = 'first'; return $classes; } 

Это, однако, всегда может прикрепить вас к «первым», если вы используете свой собственный WP_Query вложенный в $wp_query который, как $wp_query , имеет значение current_post $wp_query кратным 3.

Еще более безопасным вариантом будет использование другой функции для получения имени класса:

 $class = custom_inline_post_class( array(), $my_custom_query ); function custom_inline_post_class( $classes, $query ) { if( 0 == $query->current_post || 0 == $query->current_post % 3 ) { $classes[] = 'first'; return $classes; }