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

Опубликовано: 2016-08-23

WordPress уже давно не является « просто платформой для ведения блогов ». Одной из ключевых функций, которая помогла превратить его в полноценную систему управления контентом (CMS), являются настраиваемые типы записей .

Это первая статья из серии из 3 частей на тему пользовательских типов записей (CPT). Вот темы, которые мы обсудим в следующих двух:

  • Пользовательские таксономии
  • Отображение пользовательских типов сообщений (шаблоны и запросы)

А пока давайте подробнее рассмотрим пользовательские типы сообщений и способы их настройки.

Что такое настраиваемый тип записи?

По умолчанию WordPress использует следующие типы записей:

  • Почта
  • Страница
  • Вложение
  • Редакция
  • Пункт меню

Итак, что такое настраиваемый тип записи? Пользовательский тип записи — это, по сути, запись WordPress с настраиваемыми параметрами (настраиваемые поля, пользовательская структура категории/тега и т. д.). Классическими примерами настраиваемых типов сообщений являются: книги, обзоры, отзывы, члены команды, портфолио и так далее. Но вы можете использовать его для всего, что указывает на тип контента, который вы создаете.

Почему бы вам использовать один?

Вы можете просто использовать обычные сообщения WP и использовать категории и теги, чтобы разделить разные «типы сообщений». Но это не идеально и может привести к осложнениям в будущем. Вот несколько причин, по которым вы можете захотеть использовать настраиваемый тип записи:

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

Допустим, вы пишете блог о еде. Обычно вы публикуете отзывы о ресторанах, но также хотели бы публиковать свои собственные рецепты. Рецепты станут идеальным типом пользовательского поста, потому что вам, вероятно, понадобится макет, отличный от обычного поста. Возможно, также некоторые настраиваемые поля, например, ингредиенты. С введением CPT рецепта раздел блога будет содержать только ваш обычный пост, а у ваших рецептов будет свой собственный раздел (собственная страница архива рецептов). Это облегчило бы задачу посетителям, которые хотят только посмотреть ваши рецепты.

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

Как вы можете создать собственный тип записи?

Есть два способа создать новый пользовательский тип записи.

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

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

Создайте собственный тип записи с помощью плагина — простой способ

Если вы хотите быстро и легко добавить пользовательский тип записи на свой сайт, вам следует использовать плагин, который предлагает такую ​​функциональность. Вероятно, самым популярным плагином для этого является Custom Post Type UI, он бесплатный и простой в использовании. Настроим:

  1. Установите и активируйте плагин Custom Post Type UI с панели управления wp-admin,
  2. После того, как вы активируете плагин, станет доступен пункт меню администратора CPT UI. Перейдите в CPT UI -> Добавить/редактировать типы сообщений,
  3. Здесь вы найдете множество настроек, которые вы можете применить для настройки вашего CPT. Мы не будем подробно рассматривать их все в этой статье. Но рядом с каждой меткой параметра есть значок всплывающей подсказки, объясняющий, что делает каждый параметр. Давайте установим то, что нам нужно для нашего варианта использования (отзыв CPT),
  4. Введите слаг: Testimonials, ярлык во множественном числе: Testimonials и ярлык в единственном числе: Testimonial,
  5. Вы можете нажать кнопку Изменить дополнительные метки, чтобы установить более точные метки. Но мы можем пропустить это и вернуться, если обнаружим проблему позже,
  6. Все настройки по умолчанию подходят для нашего варианта использования, мы просто добавим поддержку настраиваемых полей (установите флажок «Пользовательские поля» в разделе «Поддержка»),
  7. Нажмите «Добавить тип сообщения», чтобы создать собственный тип сообщения.

Как только мы создадим пользовательский тип сообщения, появится новый пункт меню панели Testimonials wp-admin. Теперь мы можем создавать новые отзывы со всеми полями, которые были выбраны при создании пользовательского типа публикации (заголовок, редактор, избранное изображение и настраиваемые поля).

CPT – добавить новый отзыв

Мы также можем установить таксономию для этого пользовательского типа записи, но мы рассмотрим это в следующей статье.

Создайте пользовательский тип записи вручную — требуется кодирование

Вы можете спросить себя: если вы можете создать пользовательский тип записи с помощью плагина, зачем кому-то создавать его вручную с помощью кода?

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

Код для создания пользовательского типа записи можно поместить непосредственно в тему (в functions.php ). Или вы можете создать новый плагин и поместить туда код CPT. Это также спорный вопрос в сообществе WordPress. С одной стороны написано, что он должен находиться в плагине , чтобы при смене темы данные КПТ оставались (но вывод нестилизованный и в новой теме выглядит не очень). А другая сторона считает, что код CPT лучше размещать прямо в теме , потому что он специфичен для темы и стилизован именно под эту тему.

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

Зарегистрируйте пользовательский тип сообщения с кодом

Я обещал ловкий трюк, не так ли? Что ж, на самом деле вам не нужно писать код, чтобы иметь возможность зарегистрировать пользовательский тип записи с помощью кода. Это может показаться странным, но это правда. Вы можете использовать этот инструмент на сайте generatewp.com для создания кода, необходимого для регистрации CPT. Все, что вам нужно сделать, это ввести некоторые данные и сгенерировать код. Я сделал это для нашего варианта использования отзывов, и вот что вышло:

 // Register Custom Post Type function custom_post_type_testimonials() { $labels = array( 'name' => _x( 'Testimonials', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Testimonial', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Testimonials', 'text_domain' ), 'name_admin_bar' => __( 'Testimonials', 'text_domain' ), 'archives' => __( 'Item Archives', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), 'featured_image' => __( 'Featured Image', 'text_domain' ), 'set_featured_image' => __( 'Set featured image', 'text_domain' ), 'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), 'use_featured_image' => __( 'Use as featured image', 'text_domain' ), 'insert_into_item' => __( 'Insert into item', 'text_domain' ), 'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), 'items_list' => __( 'Items list', 'text_domain' ), 'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), 'filter_items_list' => __( 'Filter items list', 'text_domain' ), ); $args = array( 'label' => __( 'Testimonials', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'testimonials', $args ); } add_action( 'init', 'custom_post_type_testimonials' );

Совершенно правильный PHP-код, который вы можете использовать в своих проектах. Как обсуждалось ранее, вы можете поместить этот код во вновь созданный плагин или в файл functions.php темы. Для простоты я выбрал второе. Я поместил этот код в файл functions.php темы, и появилось меню Testimonials wp-admin, и теперь я могу создавать новые отзывы (точно так же, как в методе плагина выше).

Вы также можете установить другой значок для своего пользовательского типа сообщения, который будет отображаться в меню wp-admin. Вам просто нужно добавить эту строку в массив $args: 'menu_icon' => 'dashicons-businessman' . Вы можете найти список всех возможных иконок здесь: WordPress Dashicons. (Спасибо Александру за этот совет).

Давайте внимательнее посмотрим на код:

  • Весь процесс регистрации CPT инкапсулирован в функции custom_post_type_testimonial() , которая подключается к хуку WP init в конце фрагмента с помощью этой строки кода: add_action( 'init', 'custom_post_type_testimonials' ); . Этот вызов add_action является последним вызовом, который приводит все в движение и заставляет WordPress творить чудеса.
  • Первый блок кода внутри функции — это массив данных с именем $labels , который содержит строки перевода для этого пользовательского типа записи.
  • Второй блок представляет собой массив аргументов, используемых для регистрации СРТ, здесь вы можете задать все настройки для СРТ. Какие поля должен поддерживать CPT, должен ли он быть общедоступным, положение меню wp-admin, должен ли он иметь страницу архива и так далее. Чтобы увидеть полный набор опций, посетите эту страницу кодекса WP.
  • Последняя строка функции — register_post_type( 'testimonials', $args ); . Это зарегистрирует пользовательский тип сообщения «testimonials» с настройками, которые мы указали в $args выше.

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

Единственное улучшение, которое я бы изменил в сгенерированном коде, — это использование экранирующих функций интернационализации. Поэтому вместо _x() и __() я бы использовал esc_html_x() и esc_html__() . Всегда полезно экранировать выходные значения — даже строки перевода — но это тема для другой статьи в блоге.

Следующая статья из серии: Как создать пользовательскую таксономию.