Непорочный post type. Все о пользовательских типах записей WordPress. Отображение нескольких типов постов на странице категории

О произвольных типах записей в Вордпрессе (CPT, Custom Post Types in WordPress), как создать и настроить, добавить категории и теги, как сделать вложенные URL /тип записи/рубрика/запись или http://example.com/post_type/category/post/ .
Тут также описывается, как расширить стандартный функционал WordPress, создав новые типы записей, которые можно использовать в различных целях: добавить собственное порфтолио, картотеку фильмов и музыки, каталог продукции, календарь событий, даже сделать свой небольшой интернет-магазин (потому что для большого лучше пользоваться готовыми решениями навроде WooCommerce) или социальную сеть, и много чего ещё в этом духе.
Вначале общая информация, дальше — частности.

О записях в WordPress: где хранятся в базе данных, и как их получить

Абсолютно все записи в WordPress, про которые чуть ниже, хранятся в одной таблице: wp_posts . Метаданные постов, например, данные из метабоксов , хранятся в таблице wp_postmeta .

Приведу пример, как получить 10 записей типа post (стандартные Записи в панели администратора).
В общих чертах, данные особо запрашивать не надо. В шаблонах они уже предустановлены, например, в single.php данные по записи уже доступны для обработки в цикле

If (have_posts()) { while (have_posts()) { the_post(); // Тут используем данные из цикла, такие как the_title() и т.п. } }

Если данные нужно получить где-то вне цикла или шаблона, используется запрос WP_Query

$args = array("post_type" => "post", // Тип поста: page, attachment, ... "posts_per_page" => 10, // 10 записей за раз); $p = get_posts($args); // Данные можно раскрыть в цикле if (!empty($p)) { foreach ($p as $post) { setup_postdata($post); ?> ">

Данные можно получить посредством SQL запроса:

Global $wpdb; $query = "SELECT * FROM {$wpdb -> posts} WHERE post_type = "post" LIMIT 10"; $p = $wpdb -> get_results($query); exit(print_r($p)); // в $p теперь массив с данными о постах

Все три способа выше дадут одинаковый результат на выходе.

Предустановленные типы записей в WordPress: post, page, attachment, revision, nav_menu_item

Записи или посты (post)

Самая используемая единица из всех типов, что есть в WordPress — Записи (они же посты, post). Используется в роли постов блога и тому подобного. Имеет 2 предустановленных таксономии: рубрики, они же категории (category) и метки, они же теги (post_tag).
Таксономии служат для сортировки и упорядочивания записей.
Рубрики отличаются от меток тем, что имеют древовидную структуру (могут быть вложенными друг в друга).
Метки являются независимыми друг от друга единицами и этим чем-то похожи на Записи.
Также, по умолчанию, из записей формируется RSS лента сайта на Вордпрессе.

Для Записей используются следующие файлы шаблонов (в порядке приоритета):

  1. single-post.php
  2. single.php
  3. singular.php
  4. index.php

Файлы шаблонов ищутся сверху вниз по списку в порядке приоритета. Если файл шаблона найден в теме, используется он, а поиск прекращается.

Страницы (page)

Страницы используются, в основном, в роли служебных страниц, посадочных страниц — лендингов, сборника энциклопедии и тому подобного. Имеют древовидную иерархию, то есть могут быть вложенными друг в друга, что отразится в адресе конечной страницы (ярлыки родительских будут присутствовать в цепочке URL), и в этой роли имеется возможность выставить им приоритет в сортировке.
Чтобы сделать лендинг, вы можете пойти двумя путями:

Создаём специальный шаблон страницы (page)

Где-нибудь внутри темы в корне или её поддиректории создать файл с произвольным названием и расширением php , например, landing.php . Внутри вы можете разместить совершенно любой шаблон, который может быть абсолютно не похож на другие страницы сайта. Но главное, это поместить вот такой код в начало файла:

Template Name — это специальная метка, которая говорит WordPress о том, что этот файл — специальный шаблон.
Теперь при создании и редактировании любой страницы (page) посмотрите в блоке справа с названием Атрибуты страницы, в нём в разделе Шаблон вы можете выбрать наш уникальный лендинг.

Для Страниц (Page) используется следующая иерархия шаблонов. Как и с Записями, указываю в порядке приоритета:

  1. {шаблон}.php
  2. page-{ярлык_страницы}.php
  3. page-{ID_страницы}
  4. page.php
  5. singular.php
  6. index.php

Прикрепления, вложения или аттачменты (attachment)

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

Получить вложения для последующей манипуляции над ними можно с помощью следующего кода:

$args = array("post_type" => "attachment", // Тип поста: attachment "post_status" => "inherit", // По умолчанию "publish", а с ним вложения не получить, поэтому указываем специальный статус вложения "inherit"); $p = get_posts($args); exit(print_r($p)); // На выходе будем иметь массив с вложениями

Иерархия шаблонов для аттачментов:

  1. {mime-тип}.php
  2. {mime-подтип}.php
  3. {mime-тип-подтип}.php
  4. attachment.php
  5. single.php
  6. singular.php
  7. index.php

Редакции, черновики или ревизии (revision)

Редакции, они же Ревизии — это версии черновиков записей, которые создаются автоматически, пока вы пишете статью в административной панели Вордпресса или сохраняете статью без фактической её публикации.
В процессе написания, для каждой статьи по умолчанию сохраняется каждая версия черновика. Можно сравнить две разные версии, и к нужной можно откатиться назад.
Хранить помногу версий одной и той же статьи — довольно накладно и часто бессмысленно (хотя, наверное, правильнее было бы оставлять всё по умолчанию, регулярно подчищая старые редакции с помощью плагина, например WP Optimize), поэтому число сохраняемых версий Ревизий можно изменить с помощью 2 вариантов:

  1. Использовать фильтр wp_revisions_to_keep
  2. Прописать в wp-config.php //Отключаем ревизии до минимально возможного значения define("WP_POST_REVISIONS", 0);

    Возможные значения:

    • true или -1: сохраняет каждую версию черновика. Вариант по умолчанию
    • false или 0: отключает сохранение черновиков, кроме 1 автосохранения
    • Целое число больше нуля: сохраняется указанное число версий черновиков + 1 автосохранение. Старые версии, не укладывающиеся в указанное число, автоматически удаляются

Элементы навигационного меню (nav_menu_item)

Навигационное меню (nav_menu_item) — это тип записей, который хранит информацию об единице навигации в WordPress. Первый, и пока единственный тип записи, который используется не как остальные типы записей, данные для работы и отображения на сайте получают свои отдельные функции.
Также, навигационные меню по умолчанию не включены. Чтобы их включить, нужно объявить об их поддержке в :

  1. Прописать add_theme_support("menus");
  2. Или зарегистрировать место под меню с помощью register_nav_menu() , тогда поддержка меню включится автоматически

Для получения данных пользуйтесь wp_nav_menu() , потому что WP_Query не будет работать, и это отличительная особенность типа постов nav_menu_item

// Этот код сработает wp_nav_menu(); // Выведет первое зарегистрированное непустое меню // А код ниже работать не будет $args = array("post_type" => "nav_menu_item", // Тип поста: page, attachment, ...); $p = get_posts($args); exit(print_r($p)); // На выходе будем иметь пустой массив

Пользовательский Произвольный тип записи (Custom Post Type, CPT WordPress)

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

Add_action("init", "sheensay_post_type"); function sheensay_post_type() { register_post_type("sheensay_product", array("labels" => array("name" => "Продукция", "singular_name" => "Продукцию",), "public" => true, // тип записи открыт для поиска и тому подобного "has_archive" => true, // Включаем страницы архивов "supports" => array("title", "editor", "thumbnail", "comments"), // Включаем поддержку заголовка, редактора, миниатюры, комментариев)); }

Здесь sheensay_product — это название нового типа записей. Оно не должно конфликтовать с другими в системе, об этом подробнее ниже.
Также, в этом варианте оно служит ярлыком этого типа записей, то есть присутствует в URL. Если же хотите указать другой ярлык, например продукция , делайте как на примере ниже

Add_action("init", "sheensay_post_type"); function sheensay_post_type() { register_post_type("sheensay_product", array("labels" => array("name" => "Продукция", "singular_name" => "Продукцию",), "public" => true, "rewrite" => array("slug" => "продукция"), // Тут определяется ярлык Custom Post Type "has_archive" => true, "supports" => array("title", "editor", "thumbnail"),)); }

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

В WordPress зарезервированы следующие названия, которые нельзя использовать в качестве имени нового типа записи:

  • attachment
  • revision
  • nav_menu_item
  • action
  • theme
  • order

Также, стоит воздержаться от использования префикса wp_ в начале названия, так как, возможно, это вызовет конфликты с будущими версиями ядра WordPress.
Лучше всего, если вы будете предварять названия произвольными префиксами, связанными с названием вашего сайта, продукта или бренда, например sheensay_product , тогда гарантированно избежите потенциальных конфликтов

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

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

Add_action("init", "sheensay_post_type"); function sheensay_post_type() { // Регистрируем таксономию register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Типы", "hierarchical" => true, // Если TRUE, таксономия будет аналогом рубрик (категорий). Если FALSE (по умолчанию), то таксономия станет аналогом меток (тегов). "rewrite" => array("slug" => "тип-продукции"),)); // Регистрируем произвольный тип записи (Custom Post Type) register_post_type("sheensay_product", array("labels" => array("name" => "Продукция", "singular_name" => "Продукцию",), "public" => true, "rewrite" => array("slug" => "продукция"), // Тут определяется ярлык CPT "has_archive" => true, "supports" => array("title", "editor", "thumbnail"), // Включаем поддержку заголовка, редактора, миниатюры)); }

Шаблоны для произвольных типов постов

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

Шаблон страницы записи

Перечисляются в порядке приоритета

  1. single-{тип_поста}.php
  2. single.php
  3. index.php

Шаблон архива записей

  1. archive-{тип_поста}.php
  2. archive.php
  3. index.php

Шаблон произвольной таксономии

  1. taxonomy-{имя_таксономии}-{имя_термина}.php
  2. taxonomy-{имя_таксономии}.php
  3. taxonomy.php
  4. archive.php
  5. index.php

Здесь имя_таксономии — это sheensay_product_type , а имя_термина — это ярлык той таксономии, что вы создадите в админке.

Как получить данные произвольного типа записей (Custom Post Type WordPress) и отобразить на сайте

Получить данные произвольного типа записей (Custom Post Type) в WordPress для отображения на сайте можно теми же способами, что и обычные Записи и Страницы

$args = array("post_type" => "sheensay_product", // Указываем наш новый тип записи "posts_per_page" => 10,); $p = get_posts($args); foreach ($p as $post) { setup_postdata($post); ?> ">

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

// Подключаем к стандартным "post" и "page" наш "sheensay_product" add_action("pre_get_posts", "add_sheensay_product_in_main_query"); function add_sheensay_product_in_main_query($query) { if (is_archive() && $query -> is_main_query()) $query -> set("post_type", array("post", "page", "sheensay_product")); return $query; }

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

Ниже представлен класс, с помощью которого вы сможете зарегистрировать любой произвольный тип записей с собственной таксономией, а URL будет иметь вид
http://example.com/продукция/тип/продукт

Чтобы URL формировался, вы должны перейти в настройки постоянных ссылок /wp-admin/options-permalink.php и установить любой отличный от простого вид общих настроек

Ниже сам код класса. Вы можете не вносить в него никаких изменений, а поменять ярлык типа записи можно в самом конце в строке new Sheensay_Product("продукция");
Сам код пишется в или в . Первый вариант предпочтительнее, так как в этом случае, вы не потеряете доступа к контенту нового типа записей при смене активной темы.

post_type = $post_type; /* * Регистрируем Custom Post Type */ add_action("init", array($this, "sheensay_cpt_product")); /* * Фильтруем URL */ add_filter("post_type_link", array($this, "product_permalink_structure"), 10, 2); /* * Чтобы работала пагинация */ add_action("generate_rewrite_rules", array($this, "fix_product_category_pagination")); } function sheensay_cpt_product() { /* * Регистрируем произвольную таксономию к новому типу записей */ register_taxonomy("sheensay_product_type", "sheensay_product", array("label" => "Типы", "hierarchical" => true, "query_var" => true, "rewrite" => array("slug" => $this -> post_type),)); /* * Регистрируем новый тип записи */ $labels = array("name" => "Продукция", // Основное название "singular_name" => "Продукцию", // Добавить "add_new" => "Добавить новую", // Имя ссылки на новую запись в сайдбаре "add_new_item" => "Добавить новую продукцию", // Заголовок в редакторе при добавлении новой записи); $args = array("labels" => $labels, "public" => true, "publicly_queryable" => true, "show_ui" => true, "query_var" => true, "capability_type" => "post", "hierarchical" => false, "menu_position" => null, "supports" => array("title", "editor", "thumbnail", "excerpt"), "rewrite" => array("slug" => $this -> post_type . "/%sheensay_product_type%", "with_front" => false,), "has_archive" => $this -> post_type,); register_post_type("sheensay_product", $args); if (current_user_can("manage_options")) // Вот с этой функцией осторожней. Она сбрасывает все правила определения URL. Лучше её закомментировать после завершения всех работ flush_rewrite_rules(); } function product_permalink_structure($post_link, $post) { if (FALSE !== strpos($post_link, "%sheensay_product_type%")) { $product_type_term = get_the_terms($post -> ID, "sheensay_product_type"); if (!empty($product_type_term)) $post_link = str_replace("%sheensay_product_type%", $product_type_term -> slug, $post_link); } return $post_link; } function fix_product_category_pagination($wp_rewrite) { unset($wp_rewrite -> rules[ $this -> post_type . "/([^/]+)/page/?({1,})/?$"]); $wp_rewrite -> rules = array($this -> post_type . "/?$" => $wp_rewrite -> index . "?post_type=sheensay_product", $this -> post_type . "/page/?({1,})/?$" => $wp_rewrite -> index . "?post_type=sheensay_product&paged=" . $wp_rewrite -> preg_index(1), $this -> post_type. "/([^/]+)/page/?({1,})/?$" => $wp_rewrite -> index . "?sheensay_product_type=" . $wp_rewrite -> preg_index(1) . "&paged=" . $wp_rewrite -> preg_index(2),) + $wp_rewrite -> rules; } } /* * Запускаем класс * В скобках можно определить название ярлыка типа записи */ new Sheensay_Product("продукция");

Теперь в админке вы можете зарегистрировать новую продукцию и их типы

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

Способ с плагином

Для начинающих пользователей мы рекомендуем использовать Custom Post Type UI плагин, чтобы создать пользовательский тип постов. Используя этот плагин, у вас есть возможность ассоциировать пользовательский тип постов с любой встроенной или пользовательской таксономией, включая категории. После установки плагина зайдите в CPT UI » Add/Edit Post Types для того, чтобы создать новый пользовательский тип постов или отредактировать существующий.

Прокрутите вниз до Advanced Options и там вы увидите параметр Built in Taxnomies. Отметьте ячейку напротив категорий и сохраните свой тип постов.

Ручное добавление категорий для пользовательского типа постов

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

‘taxonomies’ => array(‘category’),

Не исключено, что у вас уже есть эта строка в коде с какой-нибудь другой пользовательской таксономией. Если это так, то вам надо просто добавить запятую после нее и добавить категорию:

‘taxonomies’ => array(‘topics’, ‘category’),

Вот пример целого кода, где мы создали пользовательский тип постов под названием «фильмы» с поддержкой всех встроенных категорий.

Function custom_post_type() { // Set UI labels for Custom Post Type $labels = array("name" => _x("Movies", "Post Type General Name", "twentythirteen"), "singular_name" => _x("Movie", "Post Type Singular Name", "twentythirteen"), "menu_name" => __("Movies", "twentythirteen"), "parent_item_colon" => __("Parent Movie", "twentythirteen"), "all_items" => __("All Movies", "twentythirteen"), "view_item" => __("View Movie", "twentythirteen"), "add_new_item" => __("Add New Movie", "twentythirteen"), "add_new" => __("Add New", "twentythirteen"), "edit_item" => __("Edit Movie", "twentythirteen"), "update_item" => __("Update Movie", "twentythirteen"), "search_items" => __("Search Movie", "twentythirteen"), "not_found" => __("Not Found", "twentythirteen"), "not_found_in_trash" => __("Not found in Trash", "twentythirteen"),); // Set other options for Custom Post Type $args = array("label" => __("movies", "twentythirteen"), "description" => __("Movie news and reviews", "twentythirteen"), "labels" => $labels, "supports" => array("title", "editor", "excerpt", "author", "thumbnail", "comments", "revisions", "custom-fields",), "hierarchical" => false, "public" => true, "show_ui" => true, "show_in_menu" => true, "show_in_nav_menus" => true, "show_in_admin_bar" => true, "menu_position" => 5, "can_export" => true, "has_archive" => true, "exclude_from_search" => false, "publicly_queryable" => true, "capability_type" => "page", // This is where we add taxonomies to our CPT "taxonomies" => array("category"),); // Registering your Custom Post Type register_post_type("movies", $args); } /* Hook into the "init" action so that the function * Containing our post type registration is not * unnecessarily executed. */ add_action("init", "custom_post_type", 0);

Отображение нескольких типов постов на странице категории

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

Add_filter("pre_get_posts", "query_post_type"); function query_post_type($query) { if(is_category()) { $post_type = get_query_var("post_type"); if($post_type) $post_type = $post_type; else $post_type = array("nav_menu_item", "post", "movies"); // don"t forget nav_menu_item to allow menus to work! $query->set("post_type",$post_type); return $query; } }

Не забудьте поменять movies на название своего пользовательского типа постов.

Наша специальность - разработка и поддержка сайтов на WordPress. Контакты для бесплатной консультации - ,

Общеизвестно, что контент является основным компонентом любого веб-сайта. 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-пользователя, учитывая наличие подробной документации.

Создает новый тип записи или изменяет имеющийся.

С версии 4.6 был создан новый класс WP_Post_Type и весь код функции теперь обрабатывается этим классом, а эта функция стала оберткой для него.

Таксономии

Если для нового типа записи регистрируется таксономия, то всегда регистрируйте эту таксономию при регистрации типа записи, для этого используя параметр taxonomies . Если вы этого не сделаете, тип поста и таксономии не будут опознаны как связанные при срабатывании хуков, таких как: parse_query или pre_get_posts . Это может привести к неожиданным последствиям и ошибкам.

Таксономии нужно регистрировать отдельно. Таксономия указывается при регистрации типа записи, однако это только связь, регистрировать её нужно отдельно, с помощью register_taxonomy() .

Важно: после создания нового типа записи. Обязательно нужно зайти на страницу Настройки → Постоянные ссылки. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи.

Возвращает

WP_Post_Type объект (с версии 4.6).

Шаблон для создания нового типа записи
add_action("init", "register_post_types"); function register_post_types(){ register_post_type("post_type_name", array("label" => null, "labels" => array("name" => "____", // основное название для типа записи "singular_name" => "____", // название для одной записи этого типа "add_new" => "Добавить ____", // для добавления новой записи "add_new_item" => "Добавление ____", // заголовка у вновь создаваемой записи в админ-панели. "edit_item" => "Редактирование ____", // для редактирования типа записи "new_item" => "Новое ____", // текст новой записи "view_item" => "Смотреть ____", // для просмотра записи этого типа. "search_items" => "Искать ____", // для поиска по этим типам записи "not_found" => "Не найдено", // если в результате поиска ничего не было найдено "not_found_in_trash" => "Не найдено в корзине", // если не было найдено в корзине "parent_item_colon" => "", // для родителей (у древовидных типов) "menu_name" => "____", // название меню), "description" => "", "public" => true, // "publicly_queryable" => null, // зависит от public // "exclude_from_search" => null, // зависит от public // "show_ui" => null, // зависит от public // "show_in_nav_menus" => null, // зависит от public "show_in_menu" => null, // показывать ли в меню адмнки // "show_in_admin_bar" => null, // зависит от show_in_menu "show_in_rest" => null, // добавить в REST API. C WP 4.7 "rest_base" => null, // $post_type. C WP 4.7 "menu_position" => null, "menu_icon" => null, //"capability_type" => "post", //"capabilities" => "post", // массив дополнительных прав для этого типа записи //"map_meta_cap" => null, // Ставим true чтобы включить дефолтный обработчик специальных прав "hierarchical" => false, "supports" => [ "title", "editor" ], // "title","editor","author","thumbnail","excerpt","trackbacks","custom-fields","comments","revisions","page-attributes","post-formats" "taxonomies" => , "has_archive" => false, "rewrite" => true, "query_var" => true,)); }

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

register_post_type($post_type, $args); $post_type(строка) (обязательный)

Название типа записи (максимум 20 символов). Может содержать только строчные символы, числа, _ или - : a-z0-9_- .

Зарезервированные названия для типов постов . Нельзя использовать следующие названия для новых типов постов, так как они используются WordPress и ваш код будет конфликтовать с текущим кодом или функциями WordPress:

Post page attachment revision nav_menu_item custom_css customize_changeset action author order theme $args(массив) Массив аргументов.
По умолчанию: array() (параметры по умолчанию)

Аргументы параметра $args

label(строка) Имя типа записи помеченное для перевода на другой язык.
По умолчанию: $post_type labels(массив)

Для неустановленных строк (т.е. по умолчанию), будут использованы:

  • Для не древовидных типов записей - названия "постов".
  • Для древовидных типов записей - названия "постоянных страниц".

В массиве можно указать следующие аргументы:

"name" => "", // основное название для типа записи, обычно во множественном числе. "singular_name" => "", // название для одной записи этого типа. "add_new" => "", // текст для добавления новой записи, как "добавить новый" у постов в админ-панели. // Если нужно использовать перевод названия, вписывайте подобным образом: _x("Add New", "product"); "add_new_item" => "", // текст заголовка у вновь создаваемой записи в админ-панели. Как "Добавить новый пост" у постов. "edit_item" => "", // текст для редактирования типа записи. По умолчанию: редактировать пост/редактировать страницу. "new_item" => "", // текст новой записи. По умолчанию: "Новый пост" "view_item" => "", // текст для просмотра записи этого типа. По умолчанию: "Посмотреть пост"/"Посмотреть страницу". "search_items" => "", // текст для поиска по этим типам записи. По умолчанию "Найти пост"/"найти страницу". "not_found" => "", // текст, если в результате поиска ничего не было найдено. // По умолчанию: "Постов не было найдено"/"Страниц не было найдено". "not_found_in_trash" => "", // текст, если не было найдено в корзине. По умолчанию "Постов не было найдено в корзине"/"Страниц // не было найдено в корзине". "parent_item_colon" => "", // текст для родительских типов. Этот параметр не используется для не древовидных типов записей. // По умолчанию "Родительская страница". "all_items" => "", // Все записи. По умолчанию равен menu_name "archives" => "", // Архивы записей. По умолчанию равен all_items "insert_into_item" => "", // Вставить в запись "uploaded_to_this_item" => "", // Загружено для этой записи "featured_image" => "", // Миниатюра записи "set_featured_image" => "", // Установить миниатюру записи "remove_featured_image" => "", // Удалить миниатюру записи "use_featured_image" => "", // Использовать как миниатюру записи "filter_items_list" => "", // Фильтровать список записей "items_list_navigation" => "", // Навигация по записям "items_list" => "", // Список записей "menu_name" => "", // Название меню. По умолчанию равен name. "name_admin_bar" => "", // Название в админ баре (тулбаре). По умолчанию равен singular_name. "view_items" => "", // Название в тулбаре, для страницы архива типа записей. По умолчанию: «View Posts» / «View Pages». С WP 4.7. "attributes" => "", // Название для метабокса атрибутов записи (у страниц это метабокс «Свойства страницы» - «Page Attributes»). // По умолчанию: «Post Attributes» или «Page Attributes». С WP 4.7. "item_updated" => "", // Текст заметки в редакторе записи при обновлении записи. С WP 5.0. // По умолчанию: «Post updated.» / «Page updated.» "item_published" => "", // Текст заметки в редакторе записи при публикации записи. С WP 5.0. // По умолчанию: «Post published.» / «Page published.» "item_published_privately" => "", // Текст заметки в редакторе записи при публикации private записи. С WP 5.0. // По умолчанию: «Post published privately.» / «Page published "item_reverted_to_draft" => "", // Текст заметки в редакторе записи при возврате записи в draft. С WP 5.0. // По умолчанию: «Post reverted to draft.» / «Page reverted to "item_scheduled" => "", // Текст заметки в редакторе записи при запланированной публикации на будущую дату. С WP 5.0. // По умолчанию: «Post scheduled.» / «Page scheduled.»

Для полного списка значений см. get_post_type_labels()

По умолчанию: если не установлено, name и singular_name примят значение аргумента label

Description(строка) Короткое описание этого типа записи. Значение используется в REST API. Значение можно получить с помощью функции get_the_post_type_description() .
По умолчанию: "" public(логический)

Определяет является ли тип записи публичным или нет. На основе этого параметра строятся много других, т.е. это своего рода пред-установка для следующих параметров:

    • show_ui = false - не показывать пользовательский интерфейс (UI) для этого типа записей
    • publicly_queryable = false - запросы относящиеся к этому типу записей не будут работать в шаблоне
    • exclude_from_search = true - этот тип записей не будет учитываться при поиске по сайту
    • show_in_nav_menus = false - этот тип записей будет спрятан из выбора меню навигации
  • true
    • show_ui = true
    • publicly_queryable = true
    • exclude_from_search = false
    • show_in_nav_menus = true
  • title - блок заголовка;
  • editor - блок для ввода контента;
  • author - блок выбора автора;
  • thumbnail блок выбора миниатюры записи. Нужно также включить поддержку в установке темы post-thumbnails ;
  • excerpt - блок ввода цитаты;
  • trackbacks - включает поддержку трекбеков и пингов (за блоки не отвечает);
  • custom-fields - блок установки произвольных полей;
  • comments - блок комментариев (обсуждение);
  • revisions - блок ревизий (не отображается пока нет ревизий);
  • page-attributes - блок атрибутов постоянных страниц (шаблон и древовидная связь записей, древовидность должна быть включена).
  • post-formats – блок форматов записи, если они включены в теме.

По умолчанию: array("title","editor")

Register_meta_box_cb(строка) callback функция, которая будет срабатывать при установки мета блоков для страницы создания/редактирования этого типа записи. Используйте remove_meta_box() и add_meta_box() в callback функции.
По умолчанию: нет taxonomies(массив)

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

Связать таксономии с записью можно позднее через функцию register_taxonomy_for_object_type() .

Таксономии нужно регистрировать с помощью функции register_taxonomy() .

Этот параметр позволяет указать, какую группу конечных точек мы хотим подключить к создаваемому типу записи (к URL записи). Например, если указать "permalink_epmask" = EP_PAGES & EP_TAGS , то наш тип записи будет иметь все дополнительные варианты URL (конечные точки), которые предусмотрены для постоянных страниц и меток.

По умолчанию permalink_epmask = EP_PERMALINK - это означает, что в URL создаваемого типа записи (в правила ЧПУ) будут добавлены конечные точки, которые добавляются к обычным записям WordPress: пагинация, страница комментов и т.д.

Если не нужно добавлять никаких конечных точек к новому типу записи, то нужно указать EP_NONE . Или наоборот, указываем EP_ALL , когда нужно добавить все конечные точки.

По умолчанию: EP_PERMALINK

Has_archive(строка/логический)

Включить поддержку страниц архивов для этого типа записей (пр. УРЛ записи выглядит так: site.ru/type/post_name , тогда УРЛ архива будет такой: site.ru/type .

Если указать строку, то она будет использована в ЧПУ. Например, укажем тут typepage и получим ссылку на архив типа записи такого вида: site.ru/typepage .
Файл этого архива в теме будет иметь вид archive-type.php . Для архивов будет добавлено новое правило ЧПУ, если аргумент rewrite включен.
По умолчанию: false

Rewrite(массив/логический)

Использовать ли ЧПУ для этого типа записи. Чтобы не использовать ЧПУ укажите false. По умолчанию: true - название типа записи используется как префикс в ссылке. Можно в массиве указать дополнительные параметры для построения ЧПУ:

    slug (строка)
    Префикс в ЧПУ (/префикс/ярлык_записи). Используйте array("slug" => $slug) , чтобы создать другой префикс.
    В этом параметре можно указывать плейсхолдеры типа %category% . Но их нужно создать с помощью add_rewrite_tag() и научить WP их понимать.
    По умолчанию: название типа записи

    with_front (логический)
    Нужно ли в начало вставлять общий префикс из настроек. Префикс берется из $wp_rewite->front . Например, если структура постоянных ссылок записей в настройках имеет вид blog/%postname% , то при false получим: /news/название_поста, а при true получим: /blog/news/название_поста.
    По умолчанию: true

    feeds (логический)
    Добавить ли правило ЧПУ для RSS ленты этого типа записи.
    По умолчанию: значение аргумента has_archive

  • pages (логический)
    Добавить ли правило ЧПУ для пагинации архива записей этого типа. Пр: /post_type/page/2 .
    По умолчанию: true

По умолчанию: true (тип записи используется как префикс)

Query_var(строка/логический)

Устанавливает название параметра запроса для создаваемого типа записи.

Ставим false, чтобы убрать возможность запросов.

  • false - отключает параметр запроса. Запись не будет доступна по URL: /?{query_var}={post_slug} .
  • string - указывает название параметра зпроса. /?{query_var_string}={post_slug} .

Заметка: query_var не имеет смысла, если параметр publicly_queryable = false .

Заметка: Этот параметр добавляет указанное значение (если не указано, то ярлык типа записи) в список разрешенных параметров WordPress, чтобы WordPress понимал этот параметр запроса, см. add_rewrite_tag() . WordPress удаляет любые параметры запроса, о которых он не знает.

Пример:
Допустим мы регаем тип записи book и указали в этом параметре строку bookname . Теперь, пройде на страницу книги по ссылке /book/harry-potter , в коде обрабатывающем эту страницу get_query_var("bookname") вернет harry-potter . А если бы мы ничего не указали в этом параметре (он был бы true), то чтобы получить harry-potter , нам нужно было бы использовать get_query_var("book") .

По умолчанию: true - устанавливается аргумент $post_type

Can_export(логический) Возможность экспорта этого типа записей.
По умолчанию: true delete_with_user(логический)

  • true - удалять записи этого типа принадлежащие пользователю при удалении пользователя. Если включена корзина, записи не удаляться, а поместятся в корзину.
  • false - при удалении пользователя его записи этого типа никак не будут обрабатываться.
  • null - записи удаляться или будут перемещены в корзину, если post_type_supports("author") установлена. И не обработаются, если поддержки "author" у типа записи нет.
// $tax_slug = get_term_parents_list($term_id, $tax_name, array("separator" => "/", "format" => "slug", "link" => false, "inclusive" => true,));

Также важно, чтобы при реге типа записи, параметр hierarchical был false !

#3 Добавление таксономии в ЧПУ (у записи и таксы одинаковый префикс)

Этот пример показывает как создать запись типа Вопросы и разделы для нее. При этом ЧПУ будут:

  • У записи: site.ru/faq/{категория}/{ярлык-записи}
  • У таксы: site.ru/faq/{категория}

Тут важно сначала регнуть таксу, а потом тип записи...

Add_action("init", "register_faq_post_type"); function register_faq_post_type() { // Раздел вопроса - faqcat register_taxonomy("faqcat", array("faq"), array("label" => "Раздел вопроса", // определяется параметром $labels->name "labels" => array("name" => "Разделы вопросов", "singular_name" => "Раздел вопроса", "search_items" => "Искать Раздел вопроса", "all_items" => "Все Разделы вопросов", "parent_item" => "Родит. раздел вопроса", "parent_item_colon" => "Родит. раздел вопроса:", "edit_item" => "Ред. Раздел вопроса", "update_item" => "Обновить Раздел вопроса", "add_new_item" => "Добавить Раздел вопроса", "new_item_name" => "Новый Раздел вопроса", "menu_name" => "Раздел вопроса",), "description" => "Рубрики для раздела вопросов", // описание таксономии "public" => true, "show_in_nav_menus" => false, // равен аргументу public "show_ui" => true, // равен аргументу public "show_tagcloud" => false, // равен аргументу show_ui "hierarchical" => true, "rewrite" => array("slug"=>"faq", "hierarchical"=>false, "with_front"=>false, "feed"=>false), "show_admin_column" => true, // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5))); // тип записи - вопросы - faq register_post_type("faq", array("label" => "Вопросы", "labels" => array("name" => "Вопросы", "singular_name" => "Вопрос", "menu_name" => "Архив вопросов", "all_items" => "Все вопросы", "add_new" => "Добавить вопрос", "add_new_item" => "Добавить новый вопрос", "edit" => "Редактировать", "edit_item" => "Редактировать вопрос", "new_item" => "Новый вопрос",), "description" => "", "public" => true, "publicly_queryable" => true, "show_ui" => true, "show_in_rest" => false, "rest_base" => "", "show_in_menu" => true, "exclude_from_search" => false, "capability_type" => "post", "map_meta_cap" => true, "hierarchical" => false, "rewrite" => array("slug"=>"faq/%faqcat%", "with_front"=>false, "pages"=>false, "feeds"=>false, "feed"=>false), "has_archive" => "faq", "query_var" => true, "supports" => array("title", "editor"), "taxonomies" => array("faqcat"),)); } ## Отфильтруем ЧПУ произвольного типа // фильтр: apply_filters("post_type_link", $post_link, $post, $leavename, $sample); add_filter("post_type_link", "faq_permalink", 1, 2); function faq_permalink($permalink, $post){ // выходим если это не наш тип записи: без холдера %products% if(strpos($permalink, "%faqcat%") === false) return $permalink; // Получаем элементы таксы $terms = get_the_terms($post, "faqcat"); // если есть элемент заменим холдер if(! is_wp_error($terms) && !empty($terms) && is_object($terms)) $term_slug = array_pop($terms)->slug; // элемента нет, а должен быть... else $term_slug = "no-faqcat"; return str_replace("%faqcat%", $term_slug, $permalink); }

Заметки

Плагин для реги типа записи

Есть удобный плагин, который позволяет регистрировать новые типы записей (постов) и новые таксономии: Custom Post Type UI

Переименование заголовков типа записи

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

Этот код показывает, как переименовать стандартный тип записи "Записи" в "Статьи":

## заменим слово «записи» на «статьи» //$labels = apply_filters("post_type_labels_{$post_type}", $labels); add_filter("post_type_labels_post", "rename_posts_labels"); function rename_posts_labels($labels){ // заменять автоматически не пойдет например заменили: Запись = Статья, а в тесте получится так "Просмотреть статья" /* оригинал stdClass Object ("name" => "Записи", "singular_name" => "Запись", "add_new" => "Добавить новую", "add_new_item" => "Добавить запись", "edit_item" => "Редактировать запись", "new_item" => "Новая запись", "view_item" => "Просмотреть запись", "search_items" => "Поиск записей", "not_found" => "Записей не найдено.", "not_found_in_trash" => "Записей в корзине не найдено.", "parent_item_colon" => "", "all_items" => "Все записи", "archives" => "Архивы записей", "insert_into_item" => "Вставить в запись", "uploaded_to_this_item" => "Загруженные для этой записи", "featured_image" => "Миниатюра записи", "set_featured_image" => "Задать миниатюру", "remove_featured_image" => "Удалить миниатюру", "use_featured_image" => "Использовать как миниатюру", "filter_items_list" => "Фильтровать список записей", "items_list_navigation" => "Навигация по списку записей", "items_list" => "Список записей", "menu_name" => "Записи", "name_admin_bar" => "Запись",) */ $new = array("name" => "Статьи", "singular_name" => "Статья", "add_new" => "Добавить статью", "add_new_item" => "Добавить статью", "edit_item" => "Редактировать статью", "new_item" => "Новая статья", "view_item" => "Просмотреть статью", "search_items" => "Поиск статей", "not_found" => "Статей не найдено.", "not_found_in_trash" => "Статей в корзине не найдено.", "parent_item_colon" => "", "all_items" => "Все статьи", "archives" => "Архивы статей", "insert_into_item" => "Вставить в статью", "uploaded_to_this_item" => "Загруженные для этой статьи", "featured_image" => "Миниатюра статьи", "filter_items_list" => "Фильтровать список статей", "items_list_navigation" => "Навигация по списку статей", "items_list" => "Список статей", "menu_name" => "Статьи", "name_admin_bar" => "Статью", // пункте "добавить"); return (object) array_merge((array) $labels, $new); }

Очень дешевые, но качественные подписчики в Инстаграме доступны по адресу https://doctorsmm.com/ . Тут Вы сможете найти любое предложение персонально для Вашего аккаунта. На сайте представлено широкое разнообразие качества добавляемых страниц и скоростной режим, а также действует таргетирование аудитории по географическому признаку.

Заметки

  • Global. Массив. $wp_post_types List of post types.

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

С версии 2.9.0 Введена.
С версии 3.0.0 The show_ui argument is now enforced on the new post screen.
С версии 4.4.0 The show_ui argument is now enforced on the post type listing screen and post editing screen.
С версии 4.6.0 Post type object returned is now an instance of WP_Post_Type .
С версии 4.7.0 Introduced show_in_rest , rest_base and rest_controller_class arguments to register the post type in REST API.

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

20) { _doing_it_wrong(__FUNCTION__, __("Post type names must be between 1 and 20 characters in length."), "4.2.0"); return new WP_Error("post_type_length_invalid", __("Post type names must be between 1 and 20 characters in length.")); } $post_type_object = new WP_Post_Type($post_type, $args); $post_type_object->add_supports(); $post_type_object->add_rewrite_rules(); $post_type_object->register_meta_boxes(); $wp_post_types[ $post_type ] = $post_type_object; $post_type_object->add_hooks(); $post_type_object->register_taxonomies(); /** * Fires after a post type is registered. * * @since 3.3.0 * @since 4.6.0 Converted the `$post_type` parameter to accept a `WP_Post_Type` object. * * @param string $post_type Post type. * @param WP_Post_Type $post_type_object Arguments used to register the post type. */ do_action("registered_post_type", $post_type, $post_type_object); return $post_type_object; }

Начиная с версии 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 на имя вашего произвольного типа.