Статьи

Полное руководство по пользовательским типам записей WordPress

Прошли те времена, когда WordPress назывался просто программным обеспечением для блогов.

Способность расширять свои функциональные возможности с помощью плагинов и тем, групповых сообщений или структурированных данных в различные типы, а также появление API-интерфейса WP Rest в ядре позволили ему развиться в полноценную систему управления контентом и платформу разработки.

За эти годы я успешно разработал ряд пользовательских веб-приложений, созданных на основе WordPress, которые активно используют пользовательские типы записей. Примером одного из этих веб-приложений является торговая площадка моего плагина WordPress под названием ProfilePress .

При более внимательном рассмотрении тематической торговой площадки, на которую вы ссылаетесь выше, вы обнаружите, что в ней используется настраиваемая система нумерации страниц, указанная в URL-адресе ссылок на следующую / предыдущую страницы. Таким образом, вы можете создать собственную систему разбивки на страницы, которая будет отлично работать при запросе пользовательского типа записи (CPT).

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

Я надеюсь преодолеть многие препятствия, с которыми я лично столкнулся при работе с CPT, а также некоторые интересные вещи, которые вы можете с этим сделать.

Определение типа пользовательской записи

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

Внутри все типы записей хранятся в одном и том же месте в таблице базы данных wp_posts, но различаются по столбцу с именем post_type.

Тип записи относится к различным структурированным данным, сгруппированным вместе, которые поддерживаются в таблице posts базы данных WordPress.

Примерами типов записей являются post (группа сообщений в блоге), page (группа страниц), attachment (группа загруженных файлов мультимедиа) и revision (группа редакций сообщения), которые являются встроенными или встроенными в WordPress. ,

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

Если вы создаете веб-сайт компании или бизнеса с помощью WordPress, примерами типов постов, которые вы можете создать, являются Портфолио, Отзывы и Продукты.

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

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

Создать собственный тип записи довольно просто. Во-первых, зарегистрируйте тип записи с помощью функции register_post_type() и, наконец, оберните register_post_type() в вызове функции и подключите его к действию init следующим образом:

 function portfolio_cpt () { $args = array ( 'label' => 'Portfolio' , 'public' => true , ); register_post_type( 'portfolio' , $args ); } add_action( 'init' , 'portfolio_cpt' ); 

Из приведенного выше кода вы можете видеть, что register_post_type() имеет второй параметр функции, который принимает ряд аргументов массива, необходимых для настройки каждого аспекта пользовательского типа записи.

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

Пользовательский тип сообщения - портфолио

Стоит отметить, что при вызове register_post_type() второй аргумент является необязательным. То есть CPT также может быть создан следующим образом:

 function portfolio_cpt () { register_post_type( 'portfolio' ); } add_action( 'init' , 'portfolio_cpt' ); 

Если CPT создается таким образом, он не будет отображаться в меню панели администратора (хотя все еще доступен через прямой URL-адрес « http://example.com/wp-admin/edit.php?post_type=portfolio «). и его формулировки пользовательского интерфейса (иначе называемые ярлыками) и уведомления администратора будут такими же, как встроенный тип post поста.

Давайте рассмотрим некоторые аргументы массива для настройки CPT и их соответствующих функций.

метка

Множественное описательное имя для вашего пользовательского типа сообщения. Например, если вы создаете movie CPT, это должны быть Movies .

По умолчанию будет установлено значение $post_type которое является первым параметром register_post_type() .

Этикетки

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

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

  • name : множественная форма имени вашего поста.
  • singular_name : единственная форма имени вашего поста.
  • add_new : пункт меню для добавления нового сообщения.
  • add_new_item : заголовок, показанный при создании нового сообщения.
  • edit_item : заголовок, отображаемый при редактировании сообщения.
  • new_item : отображается в меню избранного в заголовке администратора.
  • view_item : показывается вместе с постоянной ссылкой на экране редактирования сообщения.
  • search_items : текст кнопки для поля поиска на экране редактирования сообщений.
  • not_found : текст для отображения, когда в поиске в админе не найдено ни одной записи
  • not_found_in_trash : текст для отображения, когда в корзине нет сообщений.

Полный список этикеток и их описания можно найти здесь .

описание

Краткое описание того, что представляет собой тип записи, хотя я не нашел, где это используется в админке WordPress.

общественности

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

  • show_ui: определяет, показывать ли экраны администрирования.
  • publicly_queryable: определяет, могут ли запросы для этого типа поста выполняться от внешнего интерфейса.
  • exclude_from_search: должны ли сообщения появляться в результатах поиска.

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

Например, установив значение menu_position в 70, вы добавите ваш пункт меню ниже Users .

Для новых типов сообщений по умолчанию будет использоваться значок меню «Сообщения», но если вместо этого вы хотите использовать собственный значок, установите для этого ярлыка URL-адрес значка или файла изображения.

 'menu_icon' => get_stylesheet_directory_uri() . '/images/portfolio-icon.png' , 

Вы также можете использовать любой дашикон в качестве значка CPT.

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

 'menu_icon' => 'dashicons-download' , 

иерархическая

Этот аргумент позволяет вам решить, делать ли ваш CPT иерархическим или нет. Значением по умолчанию является false . Установите значение true чтобы сделать ваш CPT иерархическим.

опоры

Аргумент support позволяет вам определять массив мета-блоков и полей, которые будут отображаться на экране при редактировании или создании нового сообщения. По умолчанию это заголовок и редактор.

Установка этого аргумента в false предотвратит поведение по умолчанию (заголовок и редактор).

Есть несколько доступных вариантов:

  • title : поле ввода текста для создания заголовка сообщения.
  • editor : editor контента TinyMCE для написания.
  • author : поле выбора для изменения автора сообщения.
  • thumbnail : возможность показа изображения.
  • excerpt : текстовая область для написания пользовательской выдержки.
  • trackbacks : возможность включать и выключать трекбеки и пингбеки.
  • custom-fields : поле ввода пользовательских полей.
  • comments : включить / выключить комментарии.
  • revisions : позволяет вносить изменения в ваше сообщение.
  • post-formats : добавьте пост-форматы, см. раздел «Форматы постов»
  • page-attributes : поле атрибутов, отображаемое для страниц. Это важно для иерархических типов постов, поэтому вы можете выбрать родительский пост.

register_meta_box_cb

Предоставляет функцию обратного вызова, которая будет вызываться при настройке мета-полей для формы редактирования. Функция обратного вызова принимает один аргумент $post , который содержит объект WP_Post для редактируемой в данный момент записи.

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

 'register_meta_box_cb' => 'metabox_callback_func' , 

таксономиями

Массив зарегистрированных таксономий, таких как category или post_tag который будет использоваться с этим пользовательским типом записи.

 'taxonomies' => array ( 'post_tag' , 'category ' ), 

has_archive

Если для этого аргумента задано значение true , архивы будут включены для вашего пользовательского типа записи. Например, допустим, что ваш CPT — это books , при посещении http://yoursite.com/books отобразится список сообщений, принадлежащих books пользовательского типа.

переписать

Этот аргумент позволяет вам определить структуру постоянных ссылок для вашего пользовательского типа поста при просмотре одного поста или архива.

Значение по умолчанию true и использует $post_type качестве slug. Чтобы предотвратить перезапись, установите значение false .

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

Допустим, вы создали пользовательский тип публикации review но хотите изменить слаг URL-адреса с рецензирования на оценку , с помощью следующего аргумента перезаписи URL-адрес из http://example.com/review/harry-potter/ изменится на http://example.com/assessment/harry-potter/ для отдельных сообщений и http://example.com/review/ для http://example.com/assessment/ для архива CPT.

 'rewrite' => array ( 'slug' => 'assessment' , 'with_front' => false ), 

Всякий раз, когда вы делаете переписывание URL-адреса WordPress, убедитесь, что вы нажимаете кнопку « Save Changes в меню « Настройки» >> «Постоянные ссылки», чтобы воссоздать правила перезаписи.

Таким образом, в основном, slug определяет новый URL slug, в то время как with_front определяет, with_front ли структура постоянных with_front быть предварительно присоединена к front base.

Все еще не ясно, с with_front ? Давайте посмотрим на пример.

Скажем, у вас есть постоянная структура с блогом, добавленным к URL, как показано на рисунке ниже.

Пользовательский тип сообщения - общие настройки

Если для параметра with_front задано значение false, URL-адрес одного сообщения и архива сообщений становится соответственно http://example.com/blog/assessment/harry-potter/ и http://example.com/blog/assessment/ но если если установлено значение true , URL-адрес отдельной публикации и почтового архива соответственно становится http://example.com/assessment/harry-potter/ и http://example.com/assessment/ .

Заметили упущение blog в последнем? В этом разница.

can_export

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

query_var

Этот аргумент позволяет вам управлять переменной запроса, используемой для получения сообщений этого типа.

Если задано значение true , это позволит вам запрашивать тип книги для пользовательских записей через example.com/?book=harry-potter где harry-potter — это URL-адрес записи или записи в книге.

Если задана строка, а не истина (например, публикация ), вы можете сделать: example.com/?publication=harry-potter .

Предостережение о «query_var»

Если query_var не определен в аргументе массива регистрации CPT, по умолчанию используется $post_type поэтому он всегда определяется, если вы не установите его в false.

Здесь идет предостережение. Всякий раз, когда значение query_var добавляется в качестве строки запроса к URL-адресу, оно приводит к значению 404.

Позвольте мне уточнить. Скажем, значение вашего CPT query_var равно review и строка запроса с ключом, установленным для просмотра, была добавлена ​​к любому URL вашего сайта WordPress в любой из следующих форм:

Это приведет к 404.

Я на самом деле узнал об этом трудным путем. В то время, когда у меня была эта проблема, я создал тикет в основной трассировке WordPress, чтобы сообщить об этом как об ошибке.

Мне потребовались недели, чтобы наконец понять это, прежде чем некоторые члены основной команды WordPress ответили на мой билет.

Ускорение настройки пользовательских типов постов с помощью плагинов

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

Примеры включают (но не ограничиваются ими):

Вывод

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

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

До тех пор, счастливого кодирования!