strokoff

Произвольные типы записей в WordPress

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

Что такое произвольные посты?

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

Примеры из наших работ

Примеры других сайтов

Вы можете привести свои примеры использования произвольных типов постов в комментариях.

Добавление произвольного типа поста

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

Для примера я буду создавать произвольный тип записи — продуктов. Для интернет магазина к примеру публикация продуктов. Создаем тип с минимальными настройками.

Начиная с версии WordPerss 2.9 была представлена функция register_post_type (), однако полную свою мощь и функциональность она получили лишь в версии WordPress 3.0

Прежде чем начать, потребуется указать имя тип поста, две метки(название ссылкой в админ панели) и можно ли этот пост публиковать.

Добавляем произвольный тип поста в wordpress. Данный код вы можете вставить в functions.php вашей темы к примеру.
[cce lang=»php»]add_action( ‘init’, ‘create_my_post_types’ );
function create_my_post_types() {register_post_type(‘product’, array(‘labels’ => array( ‘name’ => __( ‘Продукты’ ),’singular_name’ => __( ‘Продукт’ ) ),’public’ => true, ) );
}[/cce]
Мы добавили действие при инициализации вызов нашей функции. С помощью функции register_post_type () добавили новый произвольный тип записи. В качестве аргументов передается первым аргументом название типа  и массив с большим количеством аргументов и меток. Теперь в администраторской панели у вас должно появится одноименное созданное вами меню. Рассмотрим принимаемые аргументы у функции register_post_type () более подробно.

Этикетки (labels) Указание параметров в labels передает значения в название действий в в админ панели. Это полезно для локализации плагинов и дополнений. По умолчанию все действия будут приписаны для post (new post, add post, search posts и т.п.) Теперь давайте рассмотрим список всех аргументов labels. Под постом подразумевается ваш тип

[cce lang=»php»]

‘labels’ => array(
‘name’ => __( ‘Продукты’ ),
‘singular_name’ => __( ‘Продукт’ ),
‘add_new’ => __( ‘Добавить’ ),
‘add_new_item’ => __( ‘Новый продукт’ ),
‘edit’ => __( ‘Редактировать’ ),
‘edit_item’ => __( ‘Редактировать продукт’ ),
‘new_item’ => __( ‘Новый продукт’ ),
‘view’ => __( ‘Посмотреть’ ),
‘view_item’ => __( ‘Посмотреть продукт’ ),
‘search_items’ => __( ‘Поиск продуктов’ ),
‘not_found’ => __( ‘Продуктов не найдено’ ),
‘not_found_in_trash’ => __( ‘В корзине нет продуктов’ ),
‘parent’ => __( ‘Родительский продукт’ ), ),

[/cce]

Описание \ description

description — аргумент принимающий описание вашего плагина. На данный момент я не встречал вывода этого параметра в админ панели и указание этого аргумента особой роли не играет.

[cce lang=»php»]

‘description’ => ‘Описание нашего типа поста в рамках рассмотрения произвольных типов постов.’

[/cce]

Доступность \ public

public — аргумент принимающий значения true или false для управления возможностью публикации постов, указание параметра автоматически решает на другие значения параметров.

[cce lang=»php»]

‘public’ => true,
‘show_ui’ => true,
‘publicly_queryable’ => true,
‘exclude_from_search’ => false,

[/cce]

Позиция в меню \ menu_position

По умолчанию новый тип постов добавляет после комментариев. Элементы в WordPress расставляются раздельно с помощью нумерацией интегралов от 5. К примеру чтобы поставить наш пункт меню после пункта «Страницы» добавим следующий код

[cce lang=»php»]

‘menu_position’ => 20,

[/cce]

Иконка меню \ menu_icon

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

[cce lang=»php»]
‘menu_icon’ => get_stylesheet_directory_uri() . ‘/images/product.png’,
[/cce]

Иерархия \ hierarchical

hierarchical — аргумент позволяет выбрать, хотите ли вы чтобы ваши посты были иерархическими. По умолчанию стоит false. Если вы установите true, ваши посты будут вести себя, как страницы в WordPress.

[cce lang=»php»]
‘hierarchical’ => true,
[/cce]

Переменная запроса \ query_var

query_var — аргумент позволяет управлять доступностью переменной для запроса, используется для получения постов этого типа. Например, можно использовать в query_posts() функции или WP_Query классе. Название переменной при запросе по умолчанию является названием вашего типа постов.

[cce lang=»php»]
‘query_var’ => true,
[/cce]

 Возможности \ capability_type

capability_type всеобъемлющий аргумент на несколько более конкретных аргументов, умолчанию post. Позволяет определить пользовательский набор возможностей, чтобы редактировать, создавать и читать ваш пользовательский тип постов.
Если вы просто хотите сохранить те же разрешения что и у блога, оставьте значения по умолчанию. В противном случае, вы можете установить capability_type и определить полномочеия в виде аргументов в массиве.

Для большинства людей, которые нуждаются в контроле над этими вещами, проще просто изменить capability_type что-то вроде моего примера product. WordPress автоматически переключится. Например, edit_post способность станет edit_product .

[cce lang=»php»]

/* Глобальный контроль продуктов. */
‘capability_type’ => ‘product’, [/cce]

Поддержка \ supports

supports — Также мы можем указать какие поля доступны для редактирования нашего поста на странице добавления поста. По умолчания это title и editor. Вот доступные варианты

[cce lang=»php»]’supports’ => array( ‘title’, ‘editor’, ‘excerpt’, ‘custom-fields’, ‘thumbnail’ ), [/cce]

Таксономии \ Taxonomies

Если у вас уже есть таксономии, вы можете разрешить своим постам также использовать эти таксономии. Вы просто должны установить в массив имя таксономии, которые вы хотели использовать.
О интеграции таксономий и произвольных типов постов я расскажу чуть позже.
[cce]
//Подключаем теги и станартные категории к своему типу постов
‘taxonomies’ => array( ‘post_tag’, ‘category ‘),
[/cce]

Экспорт \ can_export

Устанавливает возможность экспорта постов через инструменты wordpress, по умолчанию true
[cce]’can_export’ => true,[/cce]

Обратная функция \ register_meta_box_cb

Данная функция полезна для разработчиков. Вы можете создать пользовательскую функцию обратного вызова, после вывода постов.
[cce]’register_meta_box_cb’ => ‘your_callback_function_name’,[/cce]

Маска ссылки \ permalink_epmask

Маска постоянной ссылки на конечный просмотр типа поста. Врятли вам понадобится этот параметр, я оставляю его по умолчанию.
[cce]
‘permalink_epmask’ => EP_PERMALINK,
[/cce]


Последняя редакция 16 мая, 2013 в 07:05