Прошли те времена, когда 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
По умолчанию новый тип записи добавляется после пункта меню «Комментарии» в админке. Но вы должны иметь возможность переместить его в подходящую позицию по вашему выбору.
Например, установив значение menu_position
в 70, вы добавите ваш пункт меню ниже Users .
menu_icon
Для новых типов сообщений по умолчанию будет использоваться значок меню «Сообщения», но если вместо этого вы хотите использовать собственный значок, установите для этого ярлыка 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 в любой из следующих форм:
- http://example.com/?review=some-random-string
- http://example.com/a-post-slug-here/?review=some-random-string
- http://example.com/a-post-slug-here/?foo=bar&review=some-random-string
Это приведет к 404.
Я на самом деле узнал об этом трудным путем. В то время, когда у меня была эта проблема, я создал тикет в основной трассировке WordPress, чтобы сообщить об этом как об ошибке.
Мне потребовались недели, чтобы наконец понять это, прежде чем некоторые члены основной команды WordPress ответили на мой билет.
Ускорение настройки пользовательских типов постов с помощью плагинов
Теперь, когда мы рассмотрели основы, самое время отметить, что в репозитории плагинов WordPress есть несколько плагинов, которые очень упрощают создание пользовательских типов записей.
Примеры включают (но не ограничиваются ими):
Вывод
В этом уроке мы узнали, что такое пользовательские типы записей и как они создаются.
На самом деле это первая из серии статей о пользовательских типах постов WordPress. В моем следующем уроке мы узнаем, как настраивать различные уведомления администратора, как регистрировать пользовательские таксономии в типе поста и добавлять вкладку контекстной справки на экран CPT.
До тех пор, счастливого кодирования!