Как создать эксклюзивные пользовательские таксономии в WordPress
Опубликовано: 2022-03-11WordPress, одна из самых мощных систем ведения блогов и управления контентом с открытым исходным кодом, используется для обеспечения большей части интернета. До четверти всех веб-сайтов работают на WordPress, и нет недостатка в услугах разработки WordPress.
В отличие от многих других CMS, WordPress нравится многим за его гибкость и настраиваемость. Таксономии, одна из основных функций WordPress, позволяют организовать контент именно так, как вам нужно. Несмотря на то, что он поставляется с несколькими таксономиями по умолчанию, WordPress позволяет вам добавлять столько пользовательских таксономий, сколько вам нужно.
Однако, чтобы заставить таксономии вести себя именно так, как вы хотите, вам может потребоваться возиться с некоторыми недокументированными подходами.
В этой статье вы узнаете, как определить эксклюзивные пользовательские таксономии в WordPress, которые ведут себя скорее как категории, чем теги, что позволяет вам классифицировать ваши сообщения гораздо более строго, чем вы можете по умолчанию.
Что такое таксономия?
Согласно кодексу WordPress:
Таксономия — это способ группировать вещи вместе.
Например, кучу различных видов фруктов можно сгруппировать вместе по различным характеристикам, а затем этим группам можно присвоить имена.
В WordPress таксономии используются для группировки записей, страниц и даже пользовательских типов записей в разные группы.
Названия различных групп в таксономии называются терминами . Возьмем, к примеру, фрукты и то, как их можно сгруппировать по цвету. В этом случае терминами будут названия разных цветов.
По умолчанию в WordPress встроены четыре таксономии: категория , тег , категория ссылок и формат записи . Вы можете узнать больше об этих таксономиях по умолчанию здесь.
Среди этих встроенных таксономий категории и теги очень похожи, но имеют одно важное отличие: категории являются эксклюзивными таксономиями (т. е. для каждого сообщения вы можете выбрать не более одной категории), тогда как каждому сообщению может быть назначено несколько тегов.
Кроме того, категории обычно предопределены, а теги могут быть определены по мере необходимости.
Определение пользовательских таксономий
Вы можете определить пользовательскую таксономию, используя функцию register_taxonomy()
. Подробнее о функции можно узнать здесь.
Чтобы увидеть, как работает эта функция, давайте определим пользовательскую таксономию для постов с фотографиями пейзажей.
function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );
В приведенном выше фрагменте мы определяем новую таксономию для сообщений под названием view .
Вы можете думать, что эта таксономия используется для категоризации фотографий на основе вида или характера видов, присутствующих на фотографиях (например, горы, озеро или лес).
Как всегда, сообщения, относящиеся к определенным терминам этой категории, будут отображаться в разделе /view/{view_name} .
Строка возможностей в приведенном выше фрагменте не является обязательной. Без этого WordPress по умолчанию будет использовать возможности для тех же пользователей, что и записи. Как показано выше, это позволит любому пользователю с пользовательской возможностью «edit_guides» назначать таксономию сообщению, а любому пользователю с пользовательской возможностью «publish_guides» — создавать новые элементы таксономии.
Согласно официальной документации, можно определить четыре возможности:
Возможности таксономии включают в себя
assignterms
,editterms
,manageterms
(отображает таксономию в панели администрирования) иdeleteterms
.
Как используются таксономии
В своем коде вы можете использовать wp_set_object_terms()
для добавления терминов к объектам с помощью таксономии. Вы можете перечислить существующие термины, используя the_terms()
. Кроме того, вы можете использовать wp_tag_cloud()
для создания облака терминов для вашей пользовательской таксономии. Вы можете узнать больше об этих функциях здесь.
Что касается пользовательского интерфейса, WordPress создает новый метабокс для сообщений для каждой таксономии. Мета-поле похоже на мета-поле «Теги», которое позволяет вам связать один или несколько терминов с вашим сообщением. Это то, что WordPress делает по умолчанию, и это то, что мы можем изменить, сделав таксономию эксклюзивной: сделать пользовательскую таксономию похожей на таксономию категорий.
Принуждение исключительности к таксономиям
Когда мы создаем пользовательскую таксономию с помощью метода register_taxonomy()
, WordPress добавляет мета-поле с выбором нескольких элементов на страницу редактирования записи:
Используя это мета-поле, пользователь может выбрать любое количество существующих (уже использованных) терминов, а также может добавить новые термины, используя текстовое поле.
Чтобы создать таксономию, подобную категории, где каждый пост принадлежит не более чем к одной категории из набора предопределенных категорий, вы можете сделать это, немного изменив WordPress:
- Скройте мета-поле по умолчанию, созданное WordPress.
- Создайте настраиваемый метабокс на странице редактирования поста, который предоставит элементы управления для выбора одного элемента.
- Сохраните значение таксономии при сохранении публикации.
Давайте рассмотрим каждый из шагов.
Скрыть мета-поле по умолчанию, созданное WordPress
Для этого нам нужно установить для параметров show_in_quick_edit
и meta_box_cb
значение false
при вызове register_taxonomy
.

Первый вариант скрывает таксономию на панели быстрого/массового редактирования, а второй вариант скрывает ее на странице редактирования записи:
register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));
Когда метаполе по умолчанию скрыто, элементы можно добавлять в набор доступных терминов таксономии через страницу управления таксономией:
Создайте настраиваемый метабокс на странице редактирования поста
Чтобы создать собственный мета-бокс, мы можем использовать хук WordPress add_meta_boxes
. Подробнее о крючке можно узнать здесь.
add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }
Мы вызываем метод add_meta_box
со следующими аргументами:
-
taxonomy_box
— идентификатор метабокса -
__('Custom Exclusive Taxonomy')
— заголовок метабокса -
fill_custom_meta_box_content
— функция, которая используется для заполнения содержимого метабокса. -
post
— это указывает на то, что метабокс должен появиться на странице редактирования поста. -
side
— указывает место, куда следует вставить метабокс.
Обратите внимание, как мы указали taxonomy_box
в качестве идентификатора. Однако именно функция в третьем параметре позволит нам определить, что будет помещено в коробку.
Теперь мы реализуем функцию fill_custom_meta_box_content
:
<?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }
Здесь мы сначала извлекаем все термины (т. е. существующие значения) таксономии. Мы будем использовать их, чтобы показать список переключателей.
Затем мы извлекаем текущий выбранный термин таксономии, используя get_the_terms()
— она нужна нам, чтобы выбрать соответствующий переключатель.
Обратите внимание, что эта функция возвращает массив. Это связано с тем, что по умолчанию с постом может быть связано любое количество терминов. По нашему предположению, запись имеет не более одного термина, поэтому мы обращаемся к первому элементу массива. (Это нормально, если массив пуст; мы получим null
значение в качестве текущего значения, и переключатель не будет выбран.)
Генерирующий код HTML использует custom_taxonomy
в качестве имен переключателей и соответствующие идентификаторы терминов в качестве их значений; Атрибуты идентификатора переключателя используются только для подключения к тегам меток. В результате мы получаем следующий настраиваемый метабокс:
Сохранить значение таксономии при сохранении сообщения
Наконец, нам нужно сохранить значение таксономии при сохранении сообщения. Для этого мы можем использовать хук save_post
:
add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }
Вот и все! Мы сделали.
Теперь вы знаете, как определить пользовательскую таксономию, которая будет вести себя как встроенная таксономия категорий.
Примечание. WordPress принял запрос функции, чтобы упростить переключение эксклюзивности для пользовательских таксономий. Тем не менее, билет некоторое время не видел большой активности.
Заворачивать
Таксономии — очень мощная и полезная функция WordPress. По умолчанию им не хватает возможности строгой категоризации сообщений, но, как и почти во всем в WordPress, таксономии и связанные с ними функции чрезвычайно настраиваемы. Это позволяет нам добавить эту часто необходимую возможность за несколько шагов.
Представленный здесь подход также можно использовать для создания еще более настраиваемого пользовательского интерфейса на страницах редактирования сообщений для выбора термина таксономии.
Я надеюсь, что это краткое руководство по определению эксклюзивных пользовательских таксономий оказалось полезным для вас!