Создаем свой собственный тип записей в WordPress

15
15044

Периодически при разработке сайта на WordPress приходится отклоняться от основных принципов работы CMS, в частности, от базовых возможностей создания записи. Бывает необходимость размещать контент в другом формате, в формате, который не предусмотрен данной CMS «из коробки». Разберем обычный пример: мы ведем блог о животных и вроде бы всё замечательно, но через некоторое время мы захотели создать на сайте раздел посвященный животным, которые были занесены в красную книгу. Данный раздел, как позже выясниться кардинально отличается от стандартного типа записи, и внешне выглядит совсем иначе. Например, нужно будет указывать дату занесения животных в книгу, их тип, класс, царство, вид. Тут и появляется необходимость создать некий пользовательский тип Записи, дадим ему название Красная книга. Ко всему этому нам нужно создать еще дополнительный раздел с категориями (не стандартный тип, который уже есть в WordPress, а свой, только для записей типа «Красная книга»), где мы будем разделять всех животных на типы и подтипы (категория->подкатегория).

Не долго думая, приходит идея просто создать дополнительные поля и не «париться», но мешать одно с другим не самая лучшая затея, когда проще работать с каждым типом записей отдельно. Поэтому сейчас мы быстро решим проблему и создадим нужный нам функционал.

Приступим к реализации

Сразу «подшаманим» наш  файл functions.php, который располагается в папке с темой оформления Вашего WordPress сайта, wp-content/themes/ваша_тема/functions.php.

Нам нужно добавить в административную панель WordPress новый раздел пункта меню: «Красная Книга». Для этого воспользуемся многофункциональными возможностями API WordPress и напишем небольшой кусок кода:

Мы написали и инициализировали функцию, которая сообщает wodpress’у, что нужно зарегистрировать новый тип записи red_book, в массиве $labels мы передали именование, а в массиве $args указали параметры:

  • 'labels' — именования полей
  • 'supports' — включили заголовок, редактор
  • 'taxonomies' — указали другой тип категорий, которые мы создадим ниже, если Вы будете использовать стандартные категории замените red_book_tax на post
  • 'public' — указали что данный тип публичный, его могут видеть не только авторы, но и читатели
  • 'menu_position' — позиция в меню, 5 значит показывать ниже «Записи»
  • 'menu_icon' — иконка меню, dashicons-book (список иконок)

Результат:

Отлично! Мне нравится это. Но мы хотели, чтобы у нас были категории для Красной книги и тут API WordPress опять идет нам на помощь. Для того, чтобы добавить элемент «Категории» к нашему пункту, сделаем еще пару изменений в файле functions.php, добавим следующее:

Принцип реализации категорий похож на принцип реализации нового типа записи «Красная книга», отличается только функцией регистрации register_taxonomy в которой мы передаем аргумент array( 'red_book' ) чтобы пункт находился внутри пункта меню «Красная книга».

Результат:

 

На этом первая часть закончена, поставленная цель — создать собственный тип записи была реализована, конечно, частично. То, насколько просто это реализуется Вы могли видеть сами, WordPress делает это легким взмахом своего API. В следующем уроке мы создадим дополнительные секции и поля для новых записей и затем реализуем вывод в нужном для нас виде. Пример из данного урока, вы можете использовать для любых целей, Вам достаточно изменить именования полей и иконку меню. Спасибо за внимание!

Создаем свой собственный тип записей в WordPress, часть 2

15 КОММЕНТАРИИ

  1. Здравствуйте, у меня почемуто ошибка 404 внутри категории, как это можно исправить?

    • Здравствуйте. А страница category.php у вас создана?

  2. Доброго времени суток.. Все отлично все работает… но почемуто не отображаются в посте категории… также как добавить (как у записей) изображение поста ?

  3. Сделал все как в уроке.
    После регистрации таксономии в functions.php панель выдает ошибку
    [code]
    Parse error: syntax error, unexpected ‘$labels’ (T_VARIABLE)
    [/code]

    • привет! удалось решить проблему
      Parse error: syntax error, unexpected ‘$labels’ (T_VARIABLE) in C:\OpenServer\domains\lowcostway\wp-content\themes\twentyseventeen\functions.php on line 615

  4. Не могу не выразить восторг. Лет 9 работал на modx а о таком предположить не мог, хотя есть подозрение, что в octobercms так же всё просто. Спасибо!

    • Интересно, есть ли к этому всему плагин, который реализует визуальное управление данными функциями?

  5. Что-то я не подумав сказал. В modx такое реализуется за счёт достаточно привычного дерева ресурсов. Создаётся ресурс, в данном случае Красная книга, к нему шаблон, к шаблону переменные (тв), готово. Нужна галерея, пожалуйста, multitv в помощь. Почти всё реализуется без использования файлового менеджера. Теперь я разочарован, что к такому простому действию, к которому я привык как к чему то примитивнейшему, читая данную статью, отнёсся как к чуду. В любом случае, спасибо! Хоть в wp это реализуется иначе и, как мне кажется, сложней во всех аспектах, результат достаточно приятный.

  6. Всем привет! меня интересует то же что и Андрея выше: «Все отлично все работает… но почемуто не отображаются в посте категории… также как добавить (как у записей) изображение поста ?»

    картинка мне не нужно, но категория не отображается в общем списке записей Красной книги, и еще я не знаю как ее (категорию) вывести на страницу в виде селекта :( как меню рубрик в стандартных записях вордпресса

  7. подскажите пожалуйста, где взять содержимое category.php чтобы вывести категории(таксономии) способом указанным в статье. В моем случае что не делаю выводит 404 страницу.

    создал category-название типа записи.php
    в моем случае
    category-vacancy.php

    Содержимое:

    // выбираем шаблон хидера

    // проверяем, есть ли записи для отображения

    Vacancy Articles

    Вакансии авиакомпаний.

    <?php

    // Цикл
    while ( have_posts() ) : the_post();
    <a href="» rel=»bookmark» title=»Permanent Link to «>
    by

    Sorry, no posts matched your criteria.

    //выбираем шаблоны сайдбара и футера

  8. Шляпа какая то. Ошибка после добавление таксономии. Уже чел писал про ошибку но автОр так и не отписывается, видать слил статью а сам и не пробывал метод.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста оставьте комментарий!
Введите ваше имя