Произвольные типы записей в WordPress
В различных CMS публикация различного контента с отличием от простых статей решается по разному и порой с помощью множества сторонних плагинов, если нет разработчика под рукой, хотя и при разработке приходится писать целый компонент для порой не самых сложных вещей. Сегодня я расскажу о использовании произвольных типах постов в WordPress.
Что такое произвольные посты?
Создание произвольного типа контента на сайте позволяет публиковать не только материалы и статьи, как мы привыкли представлять, но и вообще публиковать имена существительные, к примеру на сайтах с портфолио, публикуется работа, в список проектов, публикуется проект ну и так можно дальше «рецепт, книга, рецензия,новость,релиз и т.д.». Не стоит использовать произвольные посты для разделения всех записей в блоге, существуют также таксономии, рубрики, метки и другие способы для пометки контента и сортировки.
Вот некоторые примеры из реализации произвольных типов постов на наших и других сайтах.
Примеры из наших работ
- Нпрофи.ru – база недвижимости
- Использование таксономий и произвольных типов постов для создания базы недвижимости. С поиском и сортировкой по таксаномиям.
- injener.org – публикация выполненных проектов
Примеры других сайтов
- Форум без больших проблем интеграции
- Онлайн хранилище книг
Вы можете привести свои примеры использования произвольных типов постов в комментариях.
Добавление произвольного типа поста
Как только вы создадите новый произвольный тип поста в, 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. Под постом подразумевается ваш тип
- 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 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 для управления возможностью публикации постов, указание параметра автоматически решает на другие значения параметров.
- show_ui : показывать административный интерфейс
- publicly_queryable : возможность выполнения запросов с фронтенда
- exclude_from_search : доступны ли посты для поиска
[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 и определить полномочеия в виде аргументов в массиве.
- edit_post : создание и редактирование постов.
- edit_posts : позволяет редактировать посты вашего типа.
- edit_others_posts : позволяет редактировать другие посты.
- publish_posts : возможность публиковать посты.
- read_post : возможность чтения постов вашего типа.
- read_private_posts : возможность чтения личных постов вашего типа.
- delete_post : возможность удаления сообщения.
Для большинства людей, которые нуждаются в контроле над этими вещами, проще просто изменить capability_type что-то вроде моего примера product. WordPress автоматически переключится. Например, edit_post способность станет edit_product .
[cce lang=»php»]
/* Глобальный контроль продуктов. */
‘capability_type’ => ‘product’, [/cce]
Поддержка \ supports
supports — Также мы можем указать какие поля доступны для редактирования нашего поста на странице добавления поста. По умолчания это title и editor. Вот доступные варианты
- title : поле ввода заголовка.
- editor : текстовое поле редактора текста.
- comments : возможность отключения комментариев вкл / выкл.
- trackbacks : возможность превращения пингов и трекбэков вкл / выкл.
- revisions : позволяет обзоры из вашего поста.
- author : отображает окно выбора для изменения автора.
- excerpt : поле для заметки пользователя.
- thumbnail : миниатюра (Избранные изображения в 3.0).
- custom-fields : произвольные поля.
- page-attributes : окно атрибутов. Важно для иерархического типа постов, вы можете выбрать родительский пост.
[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