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

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

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

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

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

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

По умолчанию при работе над постом отображаются уведомления, и предполагается, что вы работаете с типом постов post, поэтому, к примеру, если обновить пост типа book, появится следующее уведомление: 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  => '', // не используется. Сообщение начинается с индекса 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;
}

Объяснение кода: Код выше настраивает административные уведомления, генерируемые пользовательским типом постов book.

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

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

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

Пользовательские таксономии

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

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

Живой пример — Easy Digital Downloads, плагин, использующий тип постов download для цифровых записей товаров с помощью таксономии 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. А вишенкой на торте является то, что можно дополнительно классифицировать посты пользовательского типа при помощи регистрации своей таксономии.

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

Автор: Agbonghama Collins

Источник: http://www.sitepoint.com/

Редакция: Команда webformyself.

WordPress-Профессионал

Посмотрите информацию по API WordPress, благодаря Вы сможете научиться писать плагины и виджеты

Научиться

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree