Вывод произвольных типов записей в wordpress

Добавление и вывод произвольных типов записей в wordpress

Создавать пользовательские типы контента в WordPress мы уже научились. Они появились в админ части сайта. Но теперь необходимо вывести их на сайте. О том как вывести на сайте наши кастомные разделы, мы узнаем в этом уроке.

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

Произвольные типы записей и поля:

  1. Добавление произвольных типов записей в WordPress
  2. Вывод произвольных типов записей в WordPress
  3. Добавление произвольных полей к записям в WordPress
  4. Вывод произвольных полей в записях WordPress

 

Вывод (отображение) произвольных типов записей в WordPress

Все операции с файлам мы будем проводить в папке с активной темой, которая в данный момент активирована и отображается на нашем WordPress сайте. В примере я использую стандартную тему twentytwelve. Поэтому когда будете повторять данный урок, рекомендую сперва потренироваться именно на этой теме.

1. Создаем страницу отвечающую за вывод постов из кастомного раздела

Берем файл category.php, копируем его и переименовываем в template-films.php. Открываем template-films.php для редактирования и вверху файла пишем следующие строки, чтобы получилось вот так:

<?php
/*
Template Name: Шаблон фильмов
*/

Этим мы задаем имя данному шаблону.

Теперь идем в админку сайта, в раздел Страницы и создаем новую страницу. Даем ей заголовок — Все фильмы, что нибудь напишем в содержании, это неважно. И в правой колонке в блоке «Аттрибуты страницы» выбираем Шаблон «Шаблон фильмов». Публикуем страницу.

Вывод произвольных типов записей в wordpress на сайте

Вывод произвольных типов записей в wordpress на сайте

Проверяем чтобы наша страница отображалась в меню на сайте. Переходим на нее. Сейчас это просто страница и она не выводит записи из раздела Фильмы. Чтобы она выводила произвольные типы записей, необходимо изменить ее шаблон.

Вносим изменения в страницу template-films.php

Находим блок:

<?php if ( have_posts() ) : ?>

И дополняем его, чтобы он стал выглядеть вот так:

<?php 
            $args = array(
                   'post_type' => 'films',
                   'publish' => true,
                   'paged' => get_query_var('paged'),
               );
            
            query_posts($args);

            if ( have_posts() ) : 
?>

Что мы сделали. Мы добавили функцию query_posts(); которая будет обрабатывать посты заданные в переменной $args. А в переменную $args — мы передали массив, которые указывает на то что необходимо выбрать посты из типа постов «films» (псевдоним нашего произвольного типа контента) и чтобы параметр publish у них был true, то есть опубликованные. Также мы указали параметр paged — очень важно указать его именно так, чтобы в будущем когда постов станет больше чем на одну страницу, правильно работала пагинация.

Готово. Если вы все сделали правильно, то задача минимум достигнута. Мы вывели произвольные типы записей — из раздела «Фильмы» на сайте. Дальше можно заняться улучшением и детальной кастомизацией.

2. Вывод произвольных типов записей в отдельном шаблоне

Сейчас записи «Фильмы» выводятся по шаблону content.php. Допустим мы хотим чтобы у фильмов на сайте выводился другой размер миниатюры. Как задать свои размеры для изображений миниатюр в WordPress мы уже знаем. Или нам необходимо просто изменить оформление вывода каталога фильмов, изменив html шаблон вывода каждого фильма.

Для этого в коде ищем строку

get_template_part( 'content', get_post_format() );

и меняем ее на

get_template_part( 'content-films', get_post_format() );

Как видим, мы указали WordPress что теперь для вывода записей нужно брать шаблон content-films.

Теперь необходимо создать этот шаблон content-films.php. Копируем шаблон content.php и переименовываем его в content-films.php. Готово! Теперь наши «Фильмы» выводятся по шаблону content-films.php. Если необходимо изменить размер миниатюры, или изменить сам шаблон то правим файл content-films.php.

3. Шаблон для вывода отдельного материала из произвольного типа записи

Если мы откроем одну из наших записей про фильмы на сайте, то обнаружим, что сейчас она выводится по шаблону single.php, который в свою очередь задействует шаблон content.php. Чтобы изменить шаблон вывода одиночной записи для постов типа films сделаем следующее.

Скопируем файл single.php и переименуем в singel-films.php. Такое название типа single-$posttype.php WordPress автоматически будет использовать для кастомных типов постов. Так как у нас псевдоним раздела Фильмы — films, то соответственно название шаблона должно быть single-films.php.

Откроем созданный singel-films.php и посмотрим его код. Мы можем увидеть такую строку:

<?php get_template_part( 'content', get_post_format() ); ?>

Она говорит о том что все данные поста будут оформляться по шаблону content.php. Но нам этого не нужно. Для этого заменим эту строчку на следующую:

<?php get_template_part( 'content-single-films', get_post_format() ); ?>

Здесь мы переопределили шаблон, заменив его на content-single-films.php

Теперь скопируем content.php и переименуем его в content-single-films.php. Готово. Теперь одиночные посты из раздела «Фильмы» будут выводится по своему собственному шаблону content-single-films.php

 Готово!

Если вы все сделали правильно, то теперь вы имеете на своем сайте собственный раздел для контента, который выводится по своим индивидуальным шаблонам.

 

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

Произвольные типы записей и поля:

  1. Добавление произвольных типов записей в WordPress
  2. Вывод произвольных типов записей в WordPress
  3. Добавление произвольных полей к записям в WordPress
  4. Вывод произвольных полей в записях WordPress
  • Looler

    Спасибо огромное, очень выручили, НО у Вас ошибка (опечатка) на третьем шаге: нужно переименовать не в singel-films.php а в single-films.php, поэтому срабатывает не наш скопированный индивидуальный шаблон single-films.php, а файл активной темы single.php

    Еще рас Спасибо большое!!!

    P.S.: Сделайте пожалуйста туториал про добавление «Types Fields API», «Custom Fields». Заранее Спасибо!

    Удачи!!!

    • Спасибо за замечание про опечатку. Исправил.

      Про Custom Fields у меня есть два урока.

      Первый
      — Добавление произвольных полей к записям в WordPress
      http://rightblog.ru/1998 , в нем мы устанавливаем плагин ACF и добавляем
      произвольные поля к записям.

      И второй урок — Вывод произвольных
      полей ACF в шаблонах WordPress http://rightblog.ru/2038 , в нем выводим
      добавленные произвольные поля в шаблоне.

      В будущем думаю записать видеоуроки.

      Спасибо за комментарий, после таких отзывов хочется писать новые уроки!)

      • Looler

        Я смотрел эти уроки тоже, и хотелось бы за эти уроки тоже сказать Спасибо, но почему то не взлюбил я ACF с первых же дней )))) Хотя тоже мощный плагин.

        Сколько я ни читал и не пробовал, никак не получалось, ваша методика оказалась для меня (и уверен для многих), очень легкой и понятной, все получилось с первого раза.
        Так что думаю будет офигенно сделать уроки про Types Fields API и его Custom Fields (особенно их вывод).

        Не забрасывайте сайт, продолжайте в том же духе!
        Еще раз СПАСИБО!!!

        • Посмотрел Types Fields API, сделаю по ним урок как будет время.

          Насчет ACF. Я тоже сразу его не полюбил, и решил все делать руками. Но после некоторой практики, понял, что легче и удобнее использовать плагин. К тому же в нем удобный UI. По сути плагин лишь упрощает использование того что уже и так есть в WordPress или того что можно закодить самому.

          Types Fields API будет, но немного попозже. В течении или через неделю. Как появится время.

          • Looler

            Заранее Спасибо! Буду к Вам часто заглядывать, надеюсь будет много интересного и полезного.

            Сказать честно, мне надо сделать простой сайт недвижимости для моей знакомой и я перепробовал много плагинов, но у всех есть какие то минусы, недостатки или слишком замудренные и я решил заморачиться и самому сделать тоже самое но на Types (или может потом и ACF попробую) и я наткнулся на «Beautiful Taxonomy Filters», так как поисковик является одним из важных вещей на сайтах «недвижимости», то без этого плагина (или ему подобных) нет смысла самому делать все. Ну а после этого я случайно наткнулся на Ваши уроки и я все таки решил попробовать, спасибо что заставили попробовать )))))) (если достигну конечной цели, обязательно отпишусь!!!)

            Так что тоже обратите внимание на этот плагин, может и про него расскажите подробнее что да как. :)

  • Вадим

    У меня возникла проблема с открытием отдельного материала произвольного типа, не понимаю почему но при открытии записи по ссылке выводится тупо index.php файл ну и соответственно список последних записей. Даже не single.php, тип записи у меня создается через плагин, не поможете разобраться?

    • Какая у вас версия WordPress? Если 4.3 — то в ней появился новый шаблон singular.php, который используется для отображения одиночных записей, страниц и произвольных типов.

      Также чтобы ориентироваться по шаблонам — есть подсказка http://insourcecode.com/wp-content/uploads/2014/04/Template_Hierarchy.png

      • Вадим

        я думаю проблема не в этом, если мой код вставить через function.php то все нормально работает, а вот через плагин нет. Дебагер показывает что ‘query string’ равен ‘none’, в то время как, если открыть страницу записи которая была сделана через function.php то ‘query string’ равен ‘html5-blank=zsc&post_type=html5-blank&name=zsc’ для примера.

  • Нестор Махно

    Я сделал произвольный тип записей. подключил к нему Advanced Custom Fields. Добавил фотки к этой записи. А где собтсвенно шаблон произвольной записи, чтобы добавить вывод фоток плагина Advanced Custom Fields ?

  • титова кристина

    если в шаблоне нет файла category.php, то что делать? и объясните как отредактированный файл новый который переименованный, вставить в редактор темы. Заранее спасибо

    • Тогда его можно создать. Вообще при создании темя лучше пользоваться не редактором темы, а открывать тему локально и редактировать ее файлы у себя на ПК, и создавать в ней новые шаблоны (category.php и т.д.)

      • Kosyar

        Добрый день, такая же проблема с отсутствием category.php … создал новый category.php и что туда включать? он изначально будет пустым и в дальнейшем будет наполняться только кодом по Вашему уроку?

        • Добрый день.

          «Все операции с файлам мы будем проводить в папке с активной темой,
          которая в данный момент активирована и отображается на нашем WordPress
          сайте. В примере я использую стандартную тему twentytwelve. Поэтому
          когда будете повторять данный урок, рекомендую сперва потренироваться
          именно на этой теме.»

          Если в вашей теме нет этого файла, то можете взять его из темы twentytwelve. Это стандартная тема WordPress, ее можно найти в репозитории тем для WordPress.

          Подробное рассмотрение файла category.php требует детального рассмотрения, это тема для отдельного урока.

  • Victor Survex Botan

    Здраствуйте а как выводить произвольныё типы записей на главной странице ?

    • Тот же код который описан в статье вставляем в шаблон главной страницы, и они будут выводится на ней.

  • Сергей К.

    Для чего использовать функцию
    get_template_part( ‘content-films’, get_post_format() );
    или
    get_template_part( ‘content-single-films’, get_post_format() );
    если достаточно назвать файл
    single-film.php
    и все — это будет шаблон который сам будет открываться для записей «film»?

  • Vova

    Спасибо большое за данную серию статей.

    В моем шаблоне тоже не было файла category.php. Записи начинаются с single.php который направляет в content:

    решение проблемы было такое:
    1. создал копию single.php и переименовал в single-article.php
    2. поменял get_template_part( ‘partials/content’ ); на get_template_part( ‘partials/content-article’ );
    3. создал копию content.php и переименовал в content-article.php
    4. краткий заголовок назвал article.

    После таких действий новый тип записи принял шаблон не single.php, а single-article.php

    • Отлично!) Рад что получилось!)

  • Kirito

    У меня возникла проблема, создал я произвольную категорию, правильно я понимаю что вместо «films»
    ‘post_type’ => ‘films’,
    нужно вводить выделенное на скриншоте: https://pp.vk.me/c626520/v626520606/387b8/gGjyuT97ipQ.jpg
    Я ввел вместо «films» — «poster», и в итоге не получил ничего. https://pp.vk.me/c626520/v626520606/387c1/Vmvp5DXO0dg.jpg

    php the_title(); получил заголовок самой страницы, а не поста, нужно использовать другой код? Если да, то где его узнать. Я уже голову себе сломал об это.