WordPress. Форматы записей

27.04.2019

Теги: CMSWeb-разработкаWordPress

При создании новой записи, есть возможность указать формат записи — обычный, цитата, ссылка, изображение, галерея, видео, чат и так далее. Можно сказать, что это такая таксономия, элементы которой стандартны для любых тем WordPress. Однако создавать свой собственный формат нельзя.

Форматы записей — это возможность стилизовать записи сайта в зависимости от их формата. WordPress поддерживает 10 форматов (включая стандартный) — значит, можно оформить запись десятью способами. Предположим, на сайте есть обычные статьи (текст + картинки + комментарии), а есть видеозаписи (видео + описание + комментарии). Для страниц со статьями лучше белый фон, а для страниц с видео — наоборот, темный.

  • aside (заметка)
  • gallery (галерея)
  • link (ссылка)
  • image (изображение)
  • quote (цитата)
  • status (статус)
  • video (видео)
  • audio (аудио)
  • chat (чат)

Включение поддержки форматов постов

Для этого следует добавить вызов функции add_theme_support() в файл functions.php. В коде плагина вызов этой функции можно повесить на событие after_setup_theme .

add_theme_support(
    'post-formats',
    [
        'aside', 'gallery', 'link',
        'image', 'quote', 'status',
        'video', 'chat', 'audio'
    ]
    
);

По умолчанию форматы поддерживаются только записями типа post, но можно добавить поддержку и для страниц (тип записи page) и других произвольных типов постов. Для этого добавляем в файл functions.php

// включаем поддержку форматов постов для страниц
add_post_type_support('page', 'post-formats');

При регистрации собственного типа поста, можно сразу указать, что он будет поддерживать форматы записей:

register_post_type(
    'sometype',
    [
        /*...*/
        'supports' => ['title', 'editor', 'post-formats']
    ]
);

Использование форматов постов

При использовании функций body_class() и/или post_class(), WordPress, в зависимости от формата поста, будет добавлять соответствующий CSS-класс:

body_class() post_class()
.single-format-standard, .single-format-aside, .single-format-gallery, .single-format-link, .single-format-image, .single-format-quote, .single-format-status, .single-format-video, .single-format-audio, .single-format-chat .format-standard, .format-aside, .format-gallery, .format-link, .format-image, .format-quote, .format-status, .format-video, .format-audio, .format-chat
WordPress не добавляет класс для постов типа page, даже если для них включена поддержка форматов.

Функции get_post_format() и has_post_format() позволяются узнать формат той или иной записи. И, в зависимости от этого, выполнить то или иное действие:

if (get_post_format() == 'video') {
    /*.....*/
}
if (has_post_format('video')) {
    /*.....*/
}
Функция get_post_format() верзвращает false, если у поста не указан никакой формат, т.е. если это обычный пост.

Для вывода записей определенного формата можно использовать класс WP_Query:

// получаем записи с форматом video
$query = new WP_Query([
    /*.....*/
    'tax_query' => [
        [
            'taxonomy' => 'post_format',
            'field'    => 'slug',
            'terms'    => ['post-format-video'],
        ]
    ]
]);
// получаем записи с форматом aside или audio
$query = new WP_Query([
    /*.....*/
    'tax_query' => [
        'relation' => 'OR',
        [
            'taxonomy' => 'post_format',
            'field'    => 'slug',
            'terms'    => ['post-format-aside'],
        ],
        [
            'taxonomy' => 'post_format',
            'field'    => 'slug',
            'terms'    => ['post-format-audio'],
        ]
    ]
]);

Для вывода постов разных форматов удобно использовать функцию get_template_part():

get_template_part('template-parts/content', get_post_format());

Функция подключит шаблон content-aside.php, content-gallery.php, content-video.php — если это пост формата aside, gallery, video или content.php — если это обычный пост, без формата.

Поиск: CMS • Web-разработка • WordPress • Формат записи • Post formats

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.