Статьи

Пользовательские типы сообщений WordPress — уведомления и таксономии

В моем предыдущем посте я представил пользовательские типы постов (CPT) и способы их создания для вашего сайта на WordPress.

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

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

Настройка уведомлений администратора CPT

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

По умолчанию уведомления администратора, отображаемые при работе с пользовательским сообщением, предполагают, что вы имеете дело с типом сообщения, и поэтому, например, при обновлении типа сообщения в book отображается следующее уведомление: Post updated. View post Post updated. View post .

Вы можете легко изменить текст этих сообщений с помощью хука post_updated_messages следующим образом:

 add_filter( 'post_updated_messages', 'book_cpt_messages' ); /** * Book CPT updates messages. * * @param array $messages Existing post update messages. * * @return array Amended book CPT notices */ function book_cpt_messages( $messages ) { $post = get_post(); $post_type = get_post_type( $post ); $post_type_object = get_post_type_object( $post_type ); $messages['book'] = array( 0 => '', // Unused. Messages start at index 1. 1 => __( 'Book updated.', 'textdomain' ), 2 => __( 'Custom field updated.', 'textdomain' ), 3 => __( 'Custom field deleted.', 'textdomain' ), 4 => __( 'Book updated.', 'textdomain' ), 5 => isset( $_GET['revision'] ) ? sprintf( __( 'Book restored to revision from %s', 'textdomain' ), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false, 6 => __( 'Book published.', 'textdomain' ), 7 => __( 'Book saved.', 'textdomain' ), 8 => __( 'Book submitted.', 'textdomain' ), 9 => sprintf( __( 'Book scheduled for: <strong>%1$s</strong>.', 'textdomain' ), date_i18n( __( 'M j, Y @ G:i', 'textdomain' ), strtotime( $post->post_date ) ) ), 10 => __( 'Book draft updated.', 'textdomain' ) ); if ( $post_type_object->publicly_queryable ) { $permalink = get_permalink( $post->ID ); $view_link = sprintf( ' <a href="%s">%s</a>', esc_url( $permalink ), __( 'View book', 'textdomain' ) ); $messages[ $post_type ][1] .= $view_link; $messages[ $post_type ][6] .= $view_link; $messages[ $post_type ][9] .= $view_link; $preview_permalink = add_query_arg( 'preview', 'true', $permalink ); $preview_link = sprintf( ' <a target="_blank" href="%s">%s</a>', esc_url( $preview_permalink ), __( 'Preview book', 'textdomain' ) ); $messages[ $post_type ][8] .= $preview_link; $messages[ $post_type ][10] .= $preview_link; } return $messages; } 

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

Многомерный массив $messages управляет уведомлениями администраторов, отображаемыми в сообщениях любого типа.

Чтобы настроить сообщения пользовательского типа записи book , создайте индексный массив, содержащий различные сообщения в качестве значения $messages['book'] .

Оператор if проверяет, доступен ли пользовательский тип публикации для общего запроса. То есть, установлен ли public аргумент в значение true при регистрации пользовательского типа записи .

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

Таможенные таксономии

В WordPress таксономия — это механизм группировки сообщений любого типа.

Примеры таксономий включают в себя Category для группировки сообщений, которые относятся к данной категории, и Tag который очень похож на категории, но является более свободной формой. Больше информации о таксономиях доступно в Кодексе WordPress .

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

Примером из реальной жизни является плагин Easy Digital Downloads, который использует пользовательский тип публикации для записей о цифровых продуктах с таксономией download_category для классификации продуктов.

Чтобы создать собственную таксономию, используйте функцию register_taxonomy() и подключите ее к действию init следующим образом:

 add_action( 'init', 'book_category_taxonomy' ); function book_category_taxonomy() { register_taxonomy( 'book_category', 'book', array( 'label' => __( 'Book Categories' ), 'rewrite' => array( 'slug' => 'book_category' ), 'hierarchical' => true, ) ); } 

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

Книги Пользовательский Тип Почты

Категория таксономии на экране редактирования поста

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

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

Вывод

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

У вас есть вопрос или вклад? Пожалуйста, используйте комментарии, чтобы сообщить нам.