В некоторых блогах я активно пользуюсь форматами постов, задавая таким образом индивидуальное оформление и некоторые детали. Например, в посте формата галерея я вывожу слайдер изображений и галерею, а в посте формата ссылка делаю заголовок активной ссылкой на внешний источник – удобно создавать индивидуальные шаблоны для постов разных форматов, и особенно удобно быстро переключаться между ними в процессе редактирования поста.
По-умолчанию большинство современных тем уже имеют определенный набор форматов постов:
- aside – краткая текстовая заметка
- gallery – галерея изображений
- link – ссылка
- image – изображение
- quote – цитата
- status – статус
- video – видео
- audio – аудио
- chat – чат
Если же в используемой вами теме нет форматов постов, то для того, чтобы создать их, достаточно в файл functions.php вставить одну лишь строчку, перечислив в ней все форматы, которые вы будете использовать:
add_theme_support( 'post-formats', array( 'aside','link','gallery','image','quote','status','video','audio','chat' ) );
Чтобы посты определенных форматов имели индивидуальное оформление, можно создать для каждого формата отдельный файл, воспользовавшись шаблонами.
Понадобилось мне на главной странице организовать вывод постов, являющихся большими статьями, исключив из него посты некоторых форматов. Как это сделать? Сделать это, оказывается, элементарно, если в запрос данных вставить специальные параметры, определяющие форматы записей. Давайте посмотрим, как можно выводить посты, исключая из вывода некоторые форматы, либо жестко определяя перечень выводимых форматов.
Если нужно вывести посты одного определенного формата, отличного от стандартного, то легче просто указать этот формат. Запрос данных выглядит вот так:
array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => 'post-format-ФОРМАТ' ) ) ); query_posts( $args ); ?>
В этом коде ФОРМАТ нужно заменить на один из форматов aside, gallery, link, image, quote, status, video, audio или chat, чтобы получилось, например, post-format-video:
array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => 'post-format-video' ) ) ); query_posts( $args ); ?>
Если нужно определить не один формат, а несколько, например, audio и video, то форматы нужно перечислить через запятую в виде массива:
array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array('post-format-audio','post-format-video') ) ) ); query_posts( $args ); ?>
Если нужно не выводить один формат постов, а всего лишь исключить один формат постов из общего вывода, то лучше сделать его исключением:
array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => 'post-format-ФОРМАТ', 'operator' => 'NOT IN' ) ) ); query_posts( $args ); ?>
Если нужно исключить два формата или более, например, audio и video, то исключения должны определяться массивом через запятую:
array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array('post-format-audio','post-format-video'), 'operator' => 'NOT IN' ) ) ); query_posts( $args ); ?>
Наверняка вы захотите в навигационном меню сделать ссылки на разделы, содержащие посты определенного формата. Сделать это легко – достаточно лишь знать slug (ярлык) формата поста:
http://ваш_блог/type/ФОРМАТ
Например, ссылка на страницу, на который выводятся посты формата audio, выглядит так:
http://ваш_блог/type/audio
При этом по-умолчанию шаблоном для этой страницы (файлом, отвечающим за вид динамической страницы) будет являться index.php, то есть посты будут выглядеть так же, как и все посты на странице блога.
Мне необходимо вывести посты с форматом “стандартный”, остальные форматы – выводить не хочется. Как мне быть в этом случае?
Вы мне очень помогли этим мануалом. Позвольте вопрос.
Перед тем, как мне форматировать результат, мне хотелось бы знать – сколько постов содержится в query_posts. Количество хочется знать. Как узнать? Спасибо.
На каждой странице выводится столько, сколько указано в настройках блога, если количество постов не указано в параметрах query_posts.
Спасибо большое! Все отлично. только помогите теперь вывести разное количество записей форматов на главной.
все, разобралась.
добавила:
‘posts_per_page’ => 4,
вот в этом месте:
4,
‘tax_query’ => array(
Второй вопрос. Нашла убедительную статью, что не следует использовать функцию query_posts.
Вместо нее нужно использовать get_posts или WP_Query.
Исходя из этого: как в этом примере можно заменить query_posts?
Ошибки при создании вторичных циклов с помощью query_posts могут возникать из-за обращения к глобальным переменным, которые влияют, например, на пагинацию страниц. Чтобы таких ошибок не возникало, нужно не забывать сбрасывать значение глобальных переменных к дефолтным, заданным в настройках. Для этого нужно после выполнения цикла с определенными аргументами, созданного с помощью query_posts, вставлять
Эта функция сбрасывает глобальные переменные запроса к начальным.
Пример использования WP_Query вместо query_posts:
Пример использования get_posts вместо query_posts:
Для определения количества записей определенного формата, нужно в код добавить аргумент posts_per_page. Вот так:
Отличный материал! Нашел много полезного. Спасибо!