Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Plugins

Руководство по пользовательским типам записей: создание, выведение и дополнительные поля.

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called A Guide to WordPress Custom Post Types.
WordPress Custom Post Types: Taxonomies, Admin Columns & Filters

Russian (Pусский) translation by Ola Matona (you can also view the original English article)

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


Что такое пользовательские типы записей?

Предположим, вы хотите чтобы в вашем блоге был отдельный раздел для кинообзоров. Используя пользовательские типы записей вы сможете создать новый тип, к примеру, Записи и Страницы, который будет содержать другой вид данных.  У него будет свое меню администратора, специальные страницы для редактирования, свои таксономии и многие другие инструменты, которые нужны для полноценной работы с публикациями.

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


Зачем использовать пользовательские типы записей?

Пользовательские типы записей помогают хранить разные типы записей в разных местах. Это помогает отделить обычные посты от других.   Вот и все.


Создаем плагин для пользовательского типа записи

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

Шаг 1. Создайте папку для WordPress плагина 

Откройте папку с WordPress плагинами  и создайте новую папку Movie-Reviews.

Шаг 2: Создайте PHP файл

В созданной папке создайте PHP файл Movie-Reviews.php

Шаг 3: Добавьте шапку

Откройте созданный файл и вставьте код для шапки сверху.

Шаг 4: Зарегистрируйте пользовательскую функцию

Перед тегом закрытия PHP команды  введите следующую строку кода create_movie_review. При инициализации она будет запускать соответствующую пользовательскую функцию каждый раз при генерации страницы.

Шаг 5: Выполнение функции

Код для выполнения функции create_movie_review.

Функция register_post_type сделает бОльшую часть работы в нашем случае. Сразу как она вызовется, она подготовит необходимую для нового пользовательского поста конфигурацию WordPress, включая дополнительные разделы для администратора. В функцию передается два типа аргументов: уникальное имя (name)  пользовательского типа поста и массив с его свойствами. Это другой массив с другими метками, которые указывают какие текстовые  строки будут показываться в разных частях пользовательского типа записи, например: 'name' выводит название пользовательского типа записи на панели управления, 'edit' и 'view' выводят кнопки Edit и View. Думаю, все остальные аргументы говорят сами за себя.

Так, в следующих аргументах:

  • 'public' => true задает видимость пользовательского типа записи как на панели управления администратора, так и в клиентской части.
  • 'menu_position' => 15 задает, где в меню, будет находиться пользовательский тип записи.
  • 'supports' => array( 'title', 'editor', 'comments', 'thumbnail', 'custom-fields' ) задает те атрибуты пользовательского типа записи, которые будут отображаться.
  • 'taxonomies' => array( '' ) создает пользовательские таксономии. В данном случае они не определены.
  • 'menu_icon' => plugins_url( 'images/image.png', __FILE__ )  показывает иконку в меню администратора.
  • 'has_archive' => true разрешает архивирование пользовательских типов записей.

Вы можете узнать больше о других аргументах, используемых в пользовательских типах записей на странице WordPress Codex register_post_type

Шаг 6: Иконка для пользовательского типа записей

Сохраните иконку размером 16x16 пикселей в вашей папке с плагином.  Это нужно для того, чтобы на панели управления у пользовательского типа записи была иконка.

Шаг 7: Активируйте плагин

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

Шаг 8: Добавляем новую запись

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

Шаг 9: Публикуем

Опубликуйте запись и нажмите View Movie Review, чтобы увидеть созданный кинообзор.


Создание дополнительных полей для пользовательских типов записей

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

Шаг 1: Регистрируем пользовательскую функцию

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

Шаг 2: Выполняем пользовательскую функцию

Добавьте выполнение функции my_admin, которая регистрирует дополнительные поля и связывает их с пользовательским типом записи movie_reviews.

В данном случае функция add_meta_box используется для добавления дополнительных полей к пользовательскому типу записей. Об атрибутах:

  • movie_review_meta_box необходимый атрибут для HTML id 
  • Movie Review Details текст, которые будет виден в заголовке дополнительного поля
  • display_movie_review_meta_box функция обратного вызова которая отображает содержимое дополнительных полей
  • movie_review имя пользовательского типа записи, где будут отображаться дополнительные поля
  • normal определяет где на странице будет показан блок редактирования
  • high определяет приоритет отображаемых полей

Шаг 3: Выполняем функцию display_movie_review_meta_box

Этот код выводит содержимое дополнительных полей. Здесь используется объектная переменная, которая содержит информацию о каждом из показанных на панели редактирования кинообзоров. Используя этот объект мы получили ID записи и использовали его, чтобы сделать запрос в базу данных для получения имени режиссера и рейтинга, что в свою очередь выведется в полях на экране. При добавлении новой записи, функция get_post_meta возвратит пустую строку, и в итоге дополнительные поля будут пустыми.

Шаг 4: Регистрируем функцию сохранения записи

Эта функция вызывается при сохранении записи в базе данных.

Шаг 5: Выполняем функцию add_movie_review_fields

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

Шаг 6: Отключаем стандартные пользовательские поля

Создавая пользовательский тип записи, мы задали функцию create_movie_review. Удалите элемент custom-fields из массива supports, поскольку он нам больше не понадобиться. Теперь, если вы сохраните файл и откроете панель редактирования Movie Reviews, вы увидите два поля в дополнительных полях: Movie Author и Movie Rating. Вы можете добавить другие элементы тем же способом.


Создание шаблона для пользовательского типа записи

Правильным будет для каждого типа пользовательских записей использовать свои шаблоны для отображения данных. В нашем случае мы создадим шаблон, которые выводит все кинообзоры, которые были добавлены с использованием пользовательского типа записи Movie Review.

Шаг 1: Регистрируем функцию запуска шаблона

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

Шаг 2: Выполняем функцию

Здесь проверяется, есть ли в текущей папке темы шаблон типа single-(post-type-name).php. Если его там нет, то проверяется наличие шаблона в папке с плагином, куда мы и поместим наш шаблон, как часть плагина. Событийный обработчик (хук) template_include используется, чтобы изменить обычное выполнение программы и принудительно запустить специальный шаблон.

Шаг 3: Создаем файл шаблона Single Page

Сохранив ранее открытый файл с плагином, создайте другой файл с именем single-movie_reviews.php и вставьте в него следующий код.

В данном случае мы создали базовый шаблон страницы с использованием цикла. Функция query_posts получает элементы пользовательского типа записей и отображает их используя цикличность. Это конечно совсем простой цикл, вы можете менять его, как вам необходимо. Вы также можете использовать необходимые CSS стили, чтобы поменять внешнее оформление.

Внимание: необходимо создать новую страницу из панели управления используя созданный шаблон.

Шаг 4: Изображения

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

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.