Register_post_type() — позволяет зарегистрировать новый тип поста. Как добавлять категории в пользовательские типы постов в WordPress Шаблоны для произвольных типов постов

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

Немного истории

На практике, пользовательские типы записей появились достаточно давно, а точнее с 17 февраля 2005 года, когда в WordPress 1.5 была добавлена ​​поддержка пользовательских типов для статических страниц, посредством post_type поля в базе данных. Функция Wp_insert_post() была примерно с WordPress 1.0 так что, когда поле post_type было реализовано в 1.5, можно было достаточно просто заполнить его с помощью этой функции.

И только в версии 2.8 появилась функция register_post_type() для создания пользовательских типов и некоторые другие полезные вещи были доступны в «ночных сборках», а уже с 2.9 функции стали доступны всем.

А что сейчас?!

Пользовательский тип записи это не более чем обычная запись (статья) с определенным значением поля post_type в базе данных. В обычной записи поле post_type имеет значение post , страница имеет значение page и так далее. Однако теперь мы можем создавать свои собственные типы, чтобы указать особенности контента, содержащегося в записи. Можно создать пользовательские типы записей для книг, фильмов, анекдотов, продуктов и всего чего угодно.
Если все сделано правильно, то с помощью всего лишь нескольких строк кода можно достичь следующих результатов:

  • Вынести пользовательский тип на основную панель админ зоны с пунктами подменю: список всех записей с таким типов, а также создать новую запись с таким типом;
  • Создать архив записей подобного типа, то есть сделать что-то на подобии главной страницы для пользовательского типа;
  • Создать категории и теги, которые могут быть доступными для пользовательских типов записей, а также пользовательские таксономии.

Различные типы контента предъявляют различные требования к данным. Для обычных записей вы хотите, чтобы был указан автор, категория и дата. В то время как для записи с типом «книги», хотелось бы иметь возможность указать автора книги, количество страниц, жанр, издательство и другие конкретные данные. Этого легко добиться используя пользовательские (meta boxes) области для ввода данных.

— области для ввода дополнительных данных прямо на странице создания записи. Такие области упрощают работу с пользовательскими типами записей.


Работа с пользовательскими типами записей

Чтобы эффективно создавать и использовать пользовательские типы записей, Вы должны быть знакомы со следующими составляющими:

  • Создание пользовательских типов записей;
  • Создание пользовательской таксономии;
  • Создание пользовательских областей данных.

Создание пользовательских типов записей

Первое что необходимо сделать, так это создать непосредственно сам пользовательский тип записи. В идеале нужно создать плагин для работы с пользовательскими типами записей, но Вы также можете использовать файл functions.php вашей темы.

1
2
3
4
5


$args = array () ;
}

Это простейшая форма создания типа, который практически не имеет настроек. Для разработки нового типа наших записей, будем использовать некоторые из наиболее часто используемых опций и добавим их к ранее пустому массиву $args .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

function my_custom_post_product() {
$labels = array (
"name" => _x( "Продукция" , "post type general name" ) ,
"singular_name" => _x( "Продукт" , "post type singular name" ) ,
"add_new" => _x( "Добавить новый" , "product" ) ,
"add_new_item" => __( "Добавить новый продукт" ) ,
"edit_item" => __( "Редактировать продукт" ) ,
"new_item" => __( "Новый продукт" ) ,
"all_items" => __( "Вся продукция" ) ,
"view_item" => __( "Смотреть продукт" ) ,
"search_items" => __( "Найти продукт" ) ,
"not_found" => __( "Продукты не найдены" ) ,
"not_found_in_trash" => __( "Нет удаленной продукции" ) ,
"parent_item_colon" => "" ,
"menu_name" => "Продукция"
) ;
$args = array (
"labels" => $labels ,
"description" => "Пользовательский тип записей продукции" ,
"public" => true ,
"menu_position" => 5 ,
"supports" => array ( "title" , "editor" , "thumbnail" , "excerpt" , "comments" , "product_category" ) ,
"has_archive" => true ,
) ;
register_post_type( "product" , $args ) ;
}
add_action( "init" , "my_custom_post_product" ) ;

  • labels — данный массив меток используется для описания создаваемого пользовательского типа записи в теме./li>
  • description — краткая информация создаваемого пользовательского типа записи, что он делает и почему мы его используем.
  • public — использовать ли пользовательский тип публично и показывать ли его в административной зоне. В данном случае установлено истина.
  • menu_position — позиция пункта меню нашего типа на основной панели администратора. Значение 5 значит пункт установиться сразу после пункта меню «Записи», если 10 значит после пункта «Медиафайлы» и тд.
  • supports — данная опция содержит массив, в котором описаны те поля которые мы можем редактировать на странице создания записи. То есть title — появится поле для ввода названия записи, editor — будет отображена текстовая область для ввода текста записи и тд. А также указана используемая пользовательская таксономия product_category .
  • has_archive — если установлено true, будет создано правило rewrite, позволяя получить список записей нашего типа по адресу http://mysite.com/product/



После установки этого кода в файл function.php , вы должны увидеть меню для пользовательского типа записей. Появилась возможность добавлять запись и просмотреть список записей.

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

Интерактивные оповещения

WordPress генерирует некоторые сообщения, вызванные действиями пользователя. Мы также можем создать подобные сообщения, чтобы оповестить пользователя при работе с типами. Делается это post_updated_messages .

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

function my_updated_messages( $messages ) {
global $post , $post_ID ;
$messages [ "product" ] = array (
0 => "" ,
1 => sprintf ( __("Продукт обновлен. Посмотреть"
2 => __() ,
3 => __("Пользовательские поля обновлены." ) ,
4 => __("Продукт обновлен." ) ,
5 => isset ($_GET [ "revision" ] ) ? sprintf ( __("Product restored to revision from %s" ) , wp_post_revision_title( (int) $_GET [ "revision" ] , false ) ) : false ,
6 => sprintf ( __("Продукт опубликован. Посмотреть" ) , esc_url( get_permalink($post_ID ) ) ) ,
7 => __("Продукт сохранен." ) ,
8 => sprintf ( __("Продукт отправлен. Посмотреть"
9 => sprintf ( __("Продукт запланирован на: %1$s. Посмотреть" ) , date_i18n( __( "M j, Y @ G:i" ) , strtotime ( $post -> post_date ) ) , esc_url( get_permalink($post_ID ) ) ) ,
10 => sprintf ( __("Product draft updated. Посмотреть" ) , esc_url( add_query_arg( "preview" , "true" , get_permalink($post_ID ) ) ) ) ,
) ;
return $messages ;
}
add_filter( "post_updated_messages" , "my_updated_messages" ) ;

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

function my_contextual_help( $contextual_help , $screen_id , $screen ) {
if ( "edit-product" == $screen -> id ) {

$contextual_help = "

Продукция


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


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

" ;

} elseif ( "product" == $screen -> id ) {

$contextual_help = "

Создание/редактирование продукта


Эта страница позволяет создать продукт или отредактировать уже имеющиеся данные о нем. Пожалуйста, не забудьте заполнить дополнительные поля.

" ;

}
return $contextual_help ;
}
add_action( "contextual_help" , "my_contextual_help" , 10 , 3 ) ;

Для того чтобы показать такую подсказку нам необходимо знать идентификатор экрана. Если при создании понадобится узнать ID экрана просто делаем так:

echo $screen -> id ;



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

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

Процесс создания пользовательской таксономии практически идентичен созданию пользовательских типов записей. Давайте посмотрим на нашем примере:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

function my_taxonomies_product() {
$labels = array (
"name" => _x( "Категории продуктов" , "taxonomy general name" ) ,
"singular_name" => _x( "Категория продуктов" , "taxonomy singular name" ) ,
"search_items" => __( "Найти категорию продуктов" ) ,
"all_items" => __( "Все категории продуктов" ) ,
"parent_item" => __( "Родительская категория продуктов" ) ,
"parent_item_colon" => __( "Родительская категория продуктов:" ) ,
"edit_item" => __( "Редактировать категорию продуктов" ) ,
"update_item" => __( "Обновить категорию продуктов" ) ,
"add_new_item" => __( "Добавить новую категорию продуктов" ) ,
"new_item_name" => __( "Новая категория продуктов" ) ,
"menu_name" => __( "Категории продуктов" ) ,
) ;
$args = array (
"labels" => $labels ,
"hierarchical" => true ,
) ;
register_taxonomy( "product_category" , "product" , $args ) ;
}
add_action( "init" , "my_taxonomies_product" , 0 ) ;

Как и при создании пользовательского типа мы сформировали массив label, и указали что для создаваемой таксономии актуальна иерархическую структуру (т.е. могут быть родительский и дочерний элементы) — это свойственно рубрикам в обычных записях. В противном случае если структура не иерархическая — созданы обычные теги. Более подробно о таксономии Вы можете почитать .


Дополнительные области данных

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

Так как мы создаем пользовательский тип «Продукция», то нам явно понадобится цена продукта, давайте рассмотрим процесс создания пользовательских .

Процесс создания можно разделить на 3 этапа:

  • Определение самого блока;
  • Определение содержимого (какие поля присутствуют в блоке);
  • Описание алгоритмов обработки введенных данных.

Определение meta boxes

1
2
3
4
5
6
7
8
9
10
11

add_action( "add_meta_boxes" , "product_price_box" ) ;
function product_price_box() {
add_meta_box(
"product_price_box" ,
__( "Цена продукта" , "myplugin_textdomain" ) ,
"product_price_box_content" ,
"product" ,
"side" ,
"high"
) ;
}

Приведенный выше код создает блок со следующими параметрами:

  • product_price_box — уникальный идентификатор для meta box (он не обязательно должен совпадать с названием функции);
  • Цена продукта — название meta box, которое видит админ на странице;
  • product_price_box_content — функция, которая будет отображать содержимое окна;
  • product — название пользовательского типа записи, к которому принадлежит meta boxes;
  • side — положение блока на странице (side , normal или advanced — по-умолчанию);
  • high — приоритет meta boxes (в данном случае «высокий», блок находится в самом верху сайдбара. Варианты: high , core , low или default — по-умолчанию).

Определение содержимого

1
2
3
4
5

function product_price_box_content( $post ) {
wp_nonce_field( plugin_basename( __FILE__ ) , ) ;
echo "" ;
echo "" ;
}

Добавляем всего лишь одно поле, для ввода цены продукта. Заметьте название функции совпадает со значением третьего параметра при объявлении (код выше).

Обработка введенных данных

Последний шаг — это сохранение введенной цены на продукт в базу данных.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

add_action( "save_post" , "product_price_box_save" ) ;
function product_price_box_save( $post_id ) {

if ( defined ( "DOING_AUTOSAVE" ) && DOING_AUTOSAVE )
return ;

if ( ! wp_verify_nonce( $_POST [ "product_price_box_content_nonce" ] , plugin_basename( __FILE__ ) ) )
return ;

if ( "page" == $_POST [ "post_type" ] ) {
if ( ! current_user_can( "edit_page" , $post_id ) )
return ;
} else {
if ( ! current_user_can( "edit_post" , $post_id ) )
return ;
}
$product_price = $_POST [ "product_price" ] ;
update_post_meta( $post_id , "product_price" , $product_price ) ;
}

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

Отображение записей созданного типа на блоге

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

Так как в процессе создании пользовательского типа мы указали истину для параметра has_archive то список записей типа product доступны по адресу http://mysite.com/product/ .

Для отображения используется файл archive-.php (в нашем случае archive-product.php) если такой существует. Иначе, для отображения будет использован archive.php и если такой файл отсутствует в теме, то будет использовать )
) ;
$products = new WP_Query( $args ) ;
if ( $products -> have_posts () ) {
while ( $products -> have_posts () ) {
$products -> the_post () ;
?>
< h1>
< div class = "content" >


}
}
else {
echo "О нет, продукты не обнаружены!" ;
}
?>

Отображение цены

Введенные дополнительные данные, в нашем случае цена продукта, могут быть получены с помощью функции get_post_meta () . Так как мы используем дополнительно поле product_price , то чтобы получить значение цены:

Плагин для создания пользовательских типов записей

Если Вы не уверены в своих силах в области программирования, то всегда можно найти уже готовое решение (плагин) и воспользоваться им. Пользовательские типы не исключение. Плагин WCK Custom Post Type Creator позволяет вам легко создавать пользовательские типы записей для WordPress без знания программирования.

Начиная с версии 2.9 WordPress предоставил возможность использования произвольных типов записей. Теперь же с версии 3.0 всё стало еще приятнее с опцией создания панелей для ваших произвольных типов записей. В этой статье мы покажем вам как внедрить Произвольные Типы записей на ваш сайт на WordPress.

Создание произвольных типов записей — используем Плагин

На сегодняшний день в версии 3.0 WordPress нет встроенного интерфейса для создания произвольных типов записей. Есть только два способа, доступных для создания произвольных типов записей: плагины или хард-кодинг темы в файле functions.php . Сначала давайте рассмотрим реализацию задуманного с использованием плагинов.

Custom Post Type UI

Custom Post Type UI — это плагин, разработанный Brad Williams, который позволяет вам с легкостью создавать произвольные типы записей и таксономии. Одной из самых примечательных возможностей этого плагина является то, что он генерирует код для создания произвольных типов записей, которые в последующем можно вставить в файл functions.php темы, а из минусов то, что невозможно использовать таксономии для всех ваших типов записей.

В панели Custom Post Type UI кликните на “Add New”.

  • “Post Type Name” — это то, что будет использоваться WordPress для запросов на все записи из этого post_type.
  • “Label” — то, что будет отображаться в сайдбаре вашей Консоли, по типу стандартного меню «Записи».
  • Если раскрыть “View Advanced Options”, то можно увидеть несколько дополнительных настроек. Большинство из них интуитивно понятны, например “Public” и “Show UI”. Первая при переключении ее в True позволит вывести меню произвольного типа записи в сайдбар, а вторая (Show UI) при значении True создает панель меню.
  • “Rewrite” — то, что позволит произвольным типам записей использовать SEO Friendly WordPress URL (постоянные ссылки, ЧПУ).
  • В “Custom Rewrite Slug” вы указываете все, что вам угодно. WordPress будет использовать указанный slug для генерации постоянных ссылок. Поэтому если у нас есть домен example.com и slug — “movies”, то ваша ссылка на произвольный тип записи будет выглядеть примерно так example.com/movies .
  • Функция WordPress “Query Var” позволяет вам выполнять запросы к вашим новым типам записей. Если мы возьмем пример, приведенный выше, то чтобы получить доступ к записи с заголовком, My First Movie Post , который находится в post_type Movies , мы можем ввести example.com/?movies=my-first-movie-post . Посему переменная запроса выглядит так: ?posttypename

И, наконец, вы можете выбрать различные фичи, которые должны поддерживаться вашим произвольным типом записей, например миниатюры и цитаты.

Создание произвольных типов записей — используем файл Functions.php

Если вы предпочтете создавать произвольные типы записей без плагинов, то просто добавьте следующий код в файл functions.php вашей темы:

// Создаем тип записей Movies register_post_type("movies", array("label" => "Movies", "public" => true, "show_ui" => true, "capability_type" => "post", "hierarchical" => false, "rewrite" => array("slug" => "movies"), "query_var" => true, "supports" => array("title", "editor", "excerpt", "trackbacks", "custom-fields", "comments", "revisions", "thumbnail", "author", "page-attributes",)));

Давайте проанализируем код.

register_post_type($post_type, $args): Эта функция принимает два параметра, $post_type или название типа записи, и $args, массив параметров.

label: Имя, задаваемое типу записи, которое будет отображаться в сайдбаре административной панели сайта.

show_ui : true/false. Отображает или скрывает дефолтный интерфейс для управления этим типом записей.

capability_type: По-умолчанию: post. Тип записи для проверки возможностей чтения, редактирования и удаления.

hierarchical: Является ли запись иерархической.

rewrite: true/false. По-умолчанию: true . Если параметр slug указан, то имя slug добавляется перед записью.

query_var: true/false Устанавливает переменную для запроса к произвольному типу записи.

supports: По-умолчанию: title и author . Устанавливает различные фичи, которые будут поддерживаться типом записи.

Посетите WordPress Codex для более подробной информации по register_post_type() .

выводим произвольные типы записей

Для вывода записей из вашего произвольного типа необходимо добавить следующий код в цикл. Измените “name” на имя вашего типа записей. Примечание: вам не нужно добавлять ваши произвольные типы записей в ваш файл index.php. Можно создать и там выполнить следующий запрос внутри цикла.

$query = new WP_Query("post_type=name");

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

Build an object with all post type capabilities out of a post type object

Post type capabilities use the "capability_type" argument as a base, if the capability is not set in the "capabilities" argument array or if the "capabilities" argument is not supplied.

The capability_type argument can optionally be registered as an array, with the first value being singular and the second plural, e.g. array("story, "stories") Otherwise, an "s" will be added to the value for the plural form. After registration, capability_type will always be a string of the singular value.

By default, seven keys are accepted as part of the capabilities array:

    edit_post, read_post, and delete_post are meta capabilities, which are then generally mapped to corresponding primitive capabilities depending on the context, which would be the post being edited/read/deleted and the user or role being checked. Thus these capabilities would generally not be granted directly to users or roles.

  • edit_posts - Controls whether objects of this post type can be edited.
  • edit_others_posts - Controls whether objects of this type owned by other users can be edited. If the post type does not support an author, then this will behave like edit_posts.
  • publish_posts - Controls publishing objects of this post type.
  • read_private_posts - Controls whether private objects can be read.

These four primitive capabilities are checked in core in various locations. There are also seven other primitive capabilities which are not referenced directly in core, except in map_meta_cap(), which takes the three aforementioned meta capabilities and translates them into one or more primitive capabilities that must then be checked against the user or role, depending on the context.

  • read - Controls whether objects of this post type can be read.
  • delete_posts - Controls whether objects of this post type can be deleted.
  • delete_private_posts - Controls whether private objects can be deleted.
  • delete_published_posts - Controls whether published objects can be deleted.
  • delete_others_posts - Controls whether objects owned by other users can be can be deleted. If the post type does not support an author, then this will behave like delete_posts.
  • edit_private_posts - Controls whether private objects can be edited.
  • edit_published_posts - Controls whether published objects can be edited.

These additional capabilities are only used in map_meta_cap(). Thus, they are only assigned by default if the post type is registered with the "map_meta_cap" argument set to true (default is false).

Хуков нет.

Возвращает

Объект. Object with all the capabilities as member variables.

Использование

get_post_type_capabilities($args); $args(объект) (обязательный) Post type registration arguments.

Заметки

  • Смотрите: register_post_type()
  • Смотрите: map_meta_cap()

Список изменений

С версии 3.0.0 Введена.

Код get post type capabilities : wp-includes/post.php WP 5.2.3

capability_type)) { $args->capability_type = array($args->capability_type, $args->capability_type . "s"); } // Singular base for meta capabilities, plural base for primitive capabilities. list($singular_base, $plural_base) = $args->capability_type; $default_capabilities = array(// Meta capabilities "edit_post" => "edit_" . $singular_base, "read_post" => "read_" . $singular_base, "delete_post" => "delete_" . $singular_base, // Primitive capabilities used outside of map_meta_cap(): "edit_posts" => "edit_" . $plural_base, "edit_others_posts" => "edit_others_" . $plural_base, "publish_posts" => "publish_" . $plural_base, "read_private_posts" => "read_private_" . $plural_base,); // Primitive capabilities used within map_meta_cap(): if ($args->map_meta_cap) { $default_capabilities_for_mapping = array("read" => "read", "delete_posts" => "delete_" . $plural_base, "delete_private_posts" => "delete_private_" . $plural_base, "delete_published_posts" => "delete_published_" . $plural_base, "delete_others_posts" => "delete_others_" . $plural_base, "edit_private_posts" => "edit_private_" . $plural_base, "edit_published_posts" => "edit_published_" . $plural_base,); $default_capabilities = array_merge($default_capabilities, $default_capabilities_for_mapping); } $capabilities = array_merge($default_capabilities, $args->capabilities); // Post creation capability simply maps to edit_posts by default: if (! isset($capabilities["create_posts"])) { $capabilities["create_posts"] = $capabilities["edit_posts"]; } // Remember meta capabilities for future reference. if ($args->map_meta_cap) { _post_type_meta_capabilities($capabilities); } return (object) $capabilities; }

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

Сегодня же мы хотим рассказать вам о процессе создания таксономии для собственных типов постов, а также о создании собственных полей и мета-блоков, о сохранении данных и использовании их в собственных шаблонах для Wordpress.

Давайте приступим!

Создание таксономии (для возможности сортировки по категории)

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

Для этого мы будем использовать Wordpress-функцию . Как вы можете видеть ниже и в codex.wordpress.org, аргументы, которые она принимает, это taxonomy, за которым следует тип объекта и, наконец, $args. Для нашего примера мы создали 2 таксономии – Skills и Club Level. Мы применяем таксономии к типу записей athlete, а затем задаем аргументы, включая ярлыки и переписываем привилегии. Давайте взглянем на код.

Register_taxonomy("Sport", array("athlete"), array("hierarchical" => true, "label" => "Sport", "singular_label" => "Sport", "rewrite" => true));
register_taxonomy("Club Level", array("athlete"), array("hierarchical" => true, "label" => "Club Level", "singular_label" => "Club Level", "rewrite" => true));
Зарегистрированные таксономии выглядят примерно следующим образом.

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

Закончили уже?

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

Создание собственных полей

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

Add_action("admin_init", "admin_init");

function admin_init(){
add_meta_box("personal_info", "Personal Info", "personal_info", "athlete", "normal", "low");
}
Первая часть нашего кода инициализирует функцию admin_init(). Понятно, что вторая часть данного кода представляет собой саму функцию. В целом, этот код сообщает вашему шаблону о необходимости создать новый мета-блок под названием «Personal Info», поместить его в тип записи athlete и затем дать ему низкий приоритет (расположение в типе записи).

Круто! Ну а теперь мы закончили?

Нет еще. Но уже совсем близко! Давайте добавим еще несколько собственных полей. Это больше относится к HTML, нежели к PHP.

Создание полей в собственных мета-блоках

А теперь начинается самое интересное. Мы собираемся создать мета-блок с личными данными (мы его уже сделали выше, а сейчас собираемся заполнить его), который будет спрашивать имя и фамилию человека, пол, адрес электронной почты, номер телефона и дату рождения.

Для того чтобы сделать это, мы создаем функцию под названием personal_info(). Та же функция, которую мы вызывали в функции admin_init(). А теперь, включаем свет? Все линии сходятся.

Общеизвестно, что контент является основным компонентом любого веб-сайта. WordPress предлагает по умолчанию несколько видов контента, нацеленных больше на блоговую или новостную ориентацию. Однако для создания сайтов с иной, нестандартной, структурой (например, интернет-магазины или сайты, предоставляющие какие-либо услуги) необходимо создавать свои типы, отвечающие заданным критериям, добавляя гибкости для дальнейшего расширения ресурса.

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

Весь контент сайта “движок” хранит и выводит в виде так называемых записей, каждая из которых относится к определенному типу. Например, Страница относится к типу записей “page ”, а блоговый пост – “post ”. Это стандартные типы данных WordPress, которые уже присутствуют в свежеустановленной копии “движка”. Произвольный же тип – это сгенерированный вручную новый тип контента. В момент его объявления в системе будет зарегистрирован новый тип записей. Приведем примеры случаев, когда необходимо создавать произвольный тип данных:

  • Books (книги),
  • Organizations (организации),
  • People (люди),
  • Products (продукты),
  • Places (места) и др.

Зачем создавать свой тип записей WordPress?

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

В каких случаях стоит создавать произвольный тип записей?

Обычно создание произвольного типа записей необходимо для контента, вывод которого не вписывается в рамки встроенных типов (Записей и Страниц ). Более того, новый тип позволит добавить к записям нужные опции (например, имена, адреса, телефонные номера и пр.)

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

Произвольные (нестандартные) типы записей в WordPress можно создать двумя путями: с помощью плагина или вручную. Последний способ является наиболее трудоемким, так как предусматривает хорошую подготовленность пользователя в языках программирования. Мы же рассмотрим более легкий вариант, решающий ту же задачу, но более простым методом – через админ-интерфейс, не требуя каких-либо знаний в программировании. Для этого разработаны и успешно применяются специальные плагины. Познакомимся с наиболее популярными из них.

Плагин Custom Post Type UI

Дополнение Custom Post Type UI обеспечивает пользователю простой и понятный интерфейс для создания и управления произвольными типами данных в WordPress. Среди основных его преимуществ можно выделить:

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

Плагин Custom Post Type UI также имеет негативные стороны, особенно для начинающего WordPress-пользователя:

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

Плагин Toolset Types

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

  • поддержка расширенных возможностей произвольных типов;
  • возможность управления доступом к полям, которые могут редактировать и просматривать пользователи;
  • наличие всплывающих подсказок по сложным возможностям;
  • возможность создания отношений “родительский – дочерний элементы” между любыми типами;
  • присутствие возможности экспорта/импорта для данных плагина;
  • мультиязычность;
  • возможность повторения всех полей.

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

Плагин Custom Post Types and Custom Fields creator – WCK

WCK Custom Post Type Creator – очередной плагин для создания и управления произвольными типами записей WordPress, обеспечивающий удобный и понятный интерфейс. Плюсы дополнения:

  • простота и понятность интерфейса;
  • возможность создания и поддержки произвольных типов записей, таксономий и произвольных полей, а также мета-полей для записей, страниц и произвольных типов записей;
  • наличие краткого руководства для начала работы.

Плагин Custom Post Type Maker

Custom Post Type Maker – WordPress-плагин, позволяющий создавать произвольные типы записей и таксономии с максимальным удобством для пользователя. Решение полностью интегрировано с WordPress API и обеспечивает поддержку практически всех параметров Custom Post Type API . Имеет ряд преимуществ:

  • наличие продуманного интерфейса с отдельными секциями Post Types и Taxonomies ;
  • присутствие интерфейса для управления произвольными типами записей, такими как обычные записи и страницы;
  • предоставляет все необходимые возможности для создания и управления произвольными типами записей;
  • обеспечивает возможность задавать практически все параметры Custom Post Type API .

Среди недостатков плагина можно выделить отсутствие возможности вывода произвольных типов записей и таксономий.

Плагин CPT-onomies

CPT-onomies – плагин для создания произвольных типов записей, совместимый с мультисайтами в WordPress. Позволяет создавать мощные таксономии и отношения между записями. Среди преимуществ можно выделить:

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

Плагин давно не обновлялся, поэтому не так популярен между WordPress-пользователями.

Плагин MB Custom Post Type

Плагин MB Custom Post Type позволяет создавать произвольные типы записей и таксономии, обеспечивая легкое управление ими, благодаря понятному интерфейсу. Среди плюсов дополнения можно выделить следующие:

  • поддержка всех аргументов типа post ;
  • удобство в использовании;
  • поддержка режима live-редактирования, который автоматически заполняет все необходимые метки;
  • поддержка импорта/экспорта для созданных типов записей;
  • возможность расширения функционала при помощи аддонов.

Для работы MB Custom Post Type необходима установка плагина Meta Box .

Плагин Custom Post Type Generator

Custom Post Type Generator – простое и понятное решение, позволяющее генерировать произвольные типы записей из консоли WordPress. Плагин обеспечивает:

  • простой интерфейс;
  • возможность генерации PHP -кода для включения произвольных типов записей и таксономий в темы и плагины;
  • отдельный вывод произвольных типов записей, встроенных типов и типов, поддерживаемых темой.

Недостатком Custom Post Type Generator является отсутствие вывода зарегистрированных типов записей и таксономий в списке редактируемых объектов.

Плагин Pods – Custom Content Types and Fields

С помощью плагина Pods Вы сможете создавать практически любой тип контента вне зависимости от его сложности. Благодаря удобному интерфейсу, можно легко управлять произвольными полями и типами контента. Преимущества решения:

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

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