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

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

От автора: Дни, когда WordPress был просто системой для блогов, прошли. Возможность расширения функционала с помощью плагинов и тем, группировка постов, структурирование данных по типам, а также появление в ядре WP Rest API привели к эволюционированию WordPress в полномасштабную систему управления контентом и платформу разработки.

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

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

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

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

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

WordPress может хранить и отображать множество различных типов контента. Одна часть данного контента называется постом, хотя пост сам по себе является специфическим типом постов. «Все типы постов хранятся в одном месте, в таблице wp_posts базы данных, но посты различаются по колонке post_type»

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

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

Если вы создаете сайт для компании или бизнеса на WordPress, то типами постов могут быть Portfolio, Testimonials и Products. Теперь, когда мы разобрались с концепцией пользовательских типов постов, давайте научимся их создавать.

Как создать пользовательский тип постов

Создать пользовательский тип постов довольно просто. Сперва, необходимо зарегистрировать тип при помощи функции 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() принимает массив из нескольких обязательных аргументов, которые нужны для создания пользовательского типа поста. Созданный тип Portfolio можно посмотреть в панели администратора.

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

function portfolio_cpt() {

    register_post_type( 'portfolio' );
}

add_action( 'init', 'portfolio_cpt' );

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

Label

Множественное описательное имя типа. К примеру, если создать тип movie, то он должен называться Movies. По умолчанию стоит $post_type – первый параметр в функции register_post_type().

Labels

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

name: Множественная форма названия типа постов.

singular_name: Форма названий типов постов в единственном числе.

add_new: Пункт меню для добавления нового поста.

add_new_item: При создании нового поста отображается заголовок.

edit_item: Заголовок отображается при редактировании поста.

new_item: Отображается в меню любимых в шапке панели администратора.

view_item: Отображается вместе со ссылкой на экране редактирования поста.

search_items: Текст кнопки панели поиска на экране редактирования поста.

not_found: Текст отображается, когда не найдено ни одного поста в поиске через панель администратора.

not_found_in_trash: Текст отображается, когда в корзине нет постов.

Полный список лейблов и их описаний можно найти по ссылке.

Description

Краткое описание типа поста. Я не нашел, где в WordPress можно это задействовать.

Public

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

show_ui: задает, отображать ли экраны панели администратора.

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

exclude_from_search: должны ли посты появляться в результатах поиска.

menu_position

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

menu_icon

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

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

В качестве иконок для пользовательских типов постов можно использовать dashicon. Скажем, вы хотите использовать иконку download dashicon, для этого присвойте лейблу ниже значение dashicons-download:

'menu_icon' => 'dashicons-download',

Hierarchical

С помощью этого аргумента можно задавать иерархию для новых типов. По умолчанию стоит значение false. Если установить true, новые типы станут иерархическими.

Supports

С помощью этого аргумента можно задать массив мета боксов и полей, которые будут появляться на экране во время редактирования или создания нового поста. По умолчанию стоит title и editor. Если задать false, отключится стандартное поведение. Есть несколько возможных опций:

title: Поле ввода текста для создания заголовка поста.

editor: TinyMCE редактор для написания текста поста.

author: Выпадающий список, где можно сменить автора поста.

thumbnail: встроенные изображения.

excerpt: Область textarea для отрывка поста.

trackbacks: включение и отключение трекбеков и пингбеков.

custom-fields: кастомные поля input.

comments: включение или отключение комментариев.

revisions: Возможность редакции постов.

post-formats: Добавляет форматы постов

page-attributes: Атрибуты страницы. Важный параметр для иерархических типов постов, можно выбрать родительский пост.

register_meta_box_cb

Добавляет колбэк функцию, которая вызывается при установке мета боксов для формы редактирования. Функция принимает один аргумент $post, в котором хранится объект WP_Post текущего редактируемого поста. Функция особенно полезна для разработчиков. С ее помощью можно создавать пользовательские мета боксы, которые будут отображаться на экране редактирования типа.

'register_meta_box_cb' => 'metabox_callback_func',

Taxonomies

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

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

has_archive

Если установить данный аргумент в true, к кастомным типам постов добавятся архивы. К примеру, новый тип books, если зайти на страницу http://yoursite.com/books, то отобразится список постов по типу books.

Rewrite

С помощью данного аргумента при просмотре одного поста или архива можно задать структуру ссылок данного типа. По умолчанию стоит true и используется переменная $post_type. Чтобы отключить перезапись, необходимо установить данный параметр в false. Для полной ясности разберем пару примеров. Скажем, вы создали новый тип постов review и хотите изменить URL с review на assessment. Аргумент для перезаписи ниже изменит URL с http://example.com/review/harry-potter/ на http://example.com/assessment/harry-potter/ для конкретного поста и http://example.com/review/ на http://example.com/assessment/ для архива данного типа.

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

Всегда при изменении URL в WordPress сохраняйте изменения в панели Настройки >> ссылки для повторного создания правил перезаписи. Параметр slug отвечает за URL, а with_front задает будет структуру ссылки. Все еще не поняли для чего нужен with_front? Разберем пример. Скажем, структура вашей ссылки точно такая же как на изображении ниже с надписью blog на конце.

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

can_export

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

query_var

С помощью данного аргумента можно контролировать переменные запроса, используемые для получения постов данного типа.
Если задано true, вы сможете запросить кастомный тип book по ссылке example.com/?book=harry-potter, где harry-potter это параметр slug ссылки. Если задать строку, а не true, можно написать так: example.com/?publication=harry-potter.

Нюанс с query_var

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

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

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 core trac и сообщил об ошибке. У меня ушло несколько недель на то, чтобы разобраться с этой проблемой перед тем, как мне ответила команда WordPress.

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

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

Custom Post Type UI

Pods Framework

Custom Post Type Maker

Заключение

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

Автор: Agbonghama Collins

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

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

Хотите быстро научиться создавать сайты и блоги на WordPress с уникальным дизайном?

Получите самую полную в Рунете бесплатную систему обучения создания сайтов на 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