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

16 Мая 2013 7423 , ,

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

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

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

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

  • Нпрофи.ru – база недвижимости
  • Использование таксономий и произвольных типов постов для создания базы недвижимости. С поиском и сортировкой по таксаномиям.
  • injener.org – публикация выполненных проектов

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

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

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

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

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

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

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

Добавляем произвольный тип поста в wordpress. Данный код вы можете вставить в functions.php вашей темы к примеру.

1
2
3
add_action( 'init', 'create_my_post_types' );
function create_my_post_types() {register_post_type('product', array('labels' => array( 'name' => __( 'Продукты' ),'singular_name' => __( 'Продукт' ) ),'public' => true, ) );
}

Мы добавили действие при инициализации вызов нашей функции. С помощью функции 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 : Используется как метка при редактировании поста родительского. Полезно только для иерархических типов поста.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'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' => __( 'Родительский продукт' ), ),

Описание \ description

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

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

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

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

  • show_ui : показывать административный интерфейс 
  • publicly_queryable : возможность выполнения запросов с фронтенда
  • exclude_from_search : доступны ли посты для поиска
1
2
3
4
'public' => true,
'show_ui' => true,
'publicly_queryable' => true,
'exclude_from_search' => false,

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

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

1
'menu_position' => 20,

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

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

1
'menu_icon' => get_stylesheet_directory_uri() . '/images/product.png',

Иерархия \ hierarchical

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

1
'hierarchical' => true,

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

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

1
'query_var' => true,

 Возможности \ 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 .

1
2
/* Глобальный контроль продуктов. */
'capability_type' => 'product', 

Поддержка \ supports

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

  • title : поле ввода заголовка.
  • editor : текстовое поле редактора текста.
  • comments : возможность отключения комментариев вкл / выкл.
  • trackbacks : возможность превращения пингов и трекбэков вкл / выкл.
  • revisions : позволяет обзоры из вашего поста.
  • author : отображает окно выбора для изменения автора.
  • excerpt : поле для заметки пользователя.
  • thumbnail : миниатюра (Избранные изображения в 3.0).
  • custom-fields : произвольные поля.
  • page-attributes : окно атрибутов. Важно для иерархического типа постов, вы можете выбрать родительский пост.
1
'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail' ),

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

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

1
2
//Подключаем теги и станартные категории к своему типу постов
'taxonomies' => array( 'post_tag', 'category '),

Экспорт \ can_export

Устанавливает возможность экспорта постов через инструменты wordpress, по умолчанию true

1
'can_export' => true,

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

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

1
'register_meta_box_cb' => 'your_callback_function_name',

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

Маска постоянной ссылки на конечный просмотр типа поста. Врятли вам понадобится этот параметр, я оставляю его по умолчанию.

1
'permalink_epmask' => EP_PERMALINK,

Подписывайтесь на обновления

Читайте RSS ленту

Комментарии

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