Форматы постов и вывод на главной странице постов определенного формата

Форматы постов и вывод на главной странице постов определенного формата | n-wp.ru Настройки
Форматы постов: как их задать, как выводить, как создать навигацию по разделам с постами разных форматов.
👍 Научим создавать сайты на WordPress бесплатно за 19 уроков. Подробнее →

В некоторых блогах я активно пользуюсь форматами постов, задавая таким образом индивидуальное оформление и некоторые детали. Например, в посте формата галерея я вывожу слайдер изображений и галерею, а в посте формата ссылка делаю заголовок активной ссылкой на внешний источник — удобно создавать индивидуальные шаблоны для постов разных форматов, и особенно удобно быстро переключаться между ними в процессе редактирования поста.

Форматы постов и вывод на главной странице постов определенного формата

По-умолчанию большинство современных тем уже имеют определенный набор форматов постов:

  • 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, то есть посты будут выглядеть так же, как и все посты на странице блога.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Adward

    Мне необходимо вывести посты с форматом «стандартный», остальные форматы — выводить не хочется. Как мне быть в этом случае?

    Ответить
  2. Adward

    Вы мне очень помогли этим мануалом. Позвольте вопрос.
    Перед тем, как мне форматировать результат, мне хотелось бы знать — сколько постов содержится в query_posts. Количество хочется знать. Как узнать? Спасибо.

    Ответить
    1. tiaurus автор

      На каждой странице выводится столько, сколько указано в настройках блога, если количество постов не указано в параметрах query_posts.

      Ответить
  3. Damira

    Спасибо большое! Все отлично. только помогите теперь вывести разное количество записей форматов на главной.

    Ответить
    1. Damira

      все, разобралась.
      добавила:
      ‘posts_per_page’ => 4,

      вот в этом месте:
      4,
      ‘tax_query’ => array(

      Второй вопрос. Нашла убедительную статью, что не следует использовать функцию query_posts.
      Вместо нее нужно использовать get_posts или WP_Query.
      Исходя из этого: как в этом примере можно заменить query_posts?

      Ответить
      1. tiaurus автор

        Ошибки при создании вторичных циклов с помощью query_posts могут возникать из-за обращения к глобальным переменным, которые влияют, например, на пагинацию страниц. Чтобы таких ошибок не возникало, нужно не забывать сбрасывать значение глобальных переменных к дефолтным, заданным в настройках. Для этого нужно после выполнения цикла с определенными аргументами, созданного с помощью query_posts, вставлять

        <?php wp_reset_query(); ?>
        

        Эта функция сбрасывает глобальные переменные запроса к начальным.

        Пример использования WP_Query вместо query_posts:

        <?php
        $args = array( 
          'posts_per_page' => 5,
          'tax_query' => array(
            array(
              'taxonomy' => 'post_format',
              'field' => 'slug',
              'terms' => array('post-format-audio','post-format-video'),
              'operator' => 'NOT IN'
            )
          )
        );
        $query = new WP_Query( $args );
        ?>

        Пример использования get_posts вместо query_posts:

        <?php
        $args = array( 
          'posts_per_page' => 5,
          'tax_query' => array(
            array(
              'taxonomy' => 'post_format',
              'field' => 'slug',
              'terms' => array('post-format-audio','post-format-video'),
              'operator' => 'NOT IN'
            )
          ) 
        );
        $lastposts = get_posts( $args );
        ?>
        Ответить
    2. tiaurus автор

      Для определения количества записей определенного формата, нужно в код добавить аргумент posts_per_page. Вот так:

      <?php
      $args = array(
        'posts_per_page' => 5,
        'tax_query' => array(
          array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array('post-format-audio','post-format-video'),
            'operator' => 'NOT IN'
          )
        )
      );
      query_posts( $args );
      ?>
      
      Ответить
  4. Александр

    Отличный материал! Нашел много полезного. Спасибо!

    Ответить