Лучшие WordPress-плагины для работы с произвольными типами записей. Полное руководство по пользовательским типам постов в WordPress Непорочный post type
Создаем кастомный тип записи (Custom Post Type) Articles с кастомными категориями (Custom Taxonomy) Articles Category .
В моем случае все стандартные записи – это Товары, поэтому Статьи выведем через кастомные записи.
В файле функций functions.php регистрируем кастомный тип записи Articles:
Function wptp_create_post_type() { $labels = array("name" => __("Articles"), "singular_name" => __("Articles"), "add_new" => __("New Article"), "add_new_item" => __("Add New Article"), "edit_item" => __("Edit Article"), "new_item" => __("New Article"), "view_item" => __("View Article"), "search_items" => __("Search Articles"), "not_found" => __("No Articles Found"), "not_found_in_trash" => __("No Articles found in Trash"),); $args = array("labels" => $labels, "has_archive" => true, "public" => true, "hierarchical" => false, "menu_position" => 5, "supports" => array("title", "editor", "excerpt", "custom-fields", "thumbnail"),); register_post_type("articles", $args); } add_action("init", "wptp_create_post_type");
Если вы хотите, чтобы в кастомных постах выводились стандартные категории, тогда привяжите их к таксономии Категорий:
"taxonomies" => array("category"),
Если для кастомных постов вы создаете еще и кастомные таксономии, то связывать их надо с созданными таксономиями, если брать пример ниже, то это будут articles_category
"taxonomies" => array("articles_category"),
Затем для кастомного типа записи Articles регистрируем таксономии ‘Article Category’, чтобы разные записи могли принадлежать разным категориям.
Function wptp_register_taxonomy() { register_taxonomy("articles_category", "articles", array("labels" => array("name" => "Article Categories", "singular_name" => "Article Category", "search_items" => "Search Article Categories", "all_items" => "All Article Categories", "edit_item" => "Edit Article Categories", "update_item" => "Update Article Category", "add_new_item" => "Add New Article Category", "new_item_name" => "New Article Category Name", "menu_name" => "Article Category",), "hierarchical" => true, "sort" => true, "args" => array("orderby" => "term_order"), "show_admin_column" => true)); } add_action("init", "wptp_register_taxonomy");
Для кастомной таксономии можно изменить слаг на более красивый, чтобы он не был articles_category , но нужно учесть, чтобы таких слдагов больше не было на других страницах или постах, иначе будут проблемы:
"rewrite" => array("slug" => "blog"),
При изменении слагов необходимо обновить настройки “Постоянных ссылок” в админке, иначе будете получать 404 ошибку вместо нужной страницы.
Больше примеров можно найти и . Но привести весь этот код в порядок помогла , за что автору большая благодарность.
За внешний вид кастомной записи отвечает файл single.php , но чтобы изменить вид кастомной записи можно создать файл single-{post_type}.php – в моем случае будет single-articles.php со своим содержимым.
Теперь нужно вывести кастомные записи на странице. По умолчанию за отображение архива кастомных записей отвечает файл index.php . Но можно создать файл, который будет отвечать за вывод кастомных записей в своей таксономии.
Вариант 1 – самый правильный. Выводим записи в таксономии так же как и в обычной категории.
Для этого создаем файл taxonomy-{taxonomy}.php – в моем случае будет taxonomy-articles_category.php и в нем выводим обычный цикл, как и для стандартных записей в категории:
В файле tax-item.php выводим данные, которые нам нужно получить из каждой записи, например, заголовок, ссылку на запись, миниатюру и excerpt.
В файле pagination.php выводим пагинацию вот такого формата .
Цикл не изменяем, пагинация отлично работает. Это самый оптимальный вариант для отображения Кастомных Таксономий.
Вариант 2 – если нет кастомных таксономий, то можно просто получить все кастомные записи в виде Архива
Для этого в шаблоне создаем файл archive-{post_type}.php – в моем случае будет archive-articles.php , в котором точно так же как и в таксономии выводим обычный цикл, только вместо заголовка Таксономии выводим имя кастомного типа записи :
При этом варианте, если не создана страница архива для кастомной записи, тогда получить список всех кастомных записей можно по прямой ссылке BLOG_URL?post_type={post_type} или в моем случае http://site.com/articles/ .
Вариант 3. Просто выводим все кастомные записи Articles на странице с заданным шаблоном
"articles", "posts_per_page" => -1); $loop = new WP_Query($args); while ($loop->have_posts()) : $loop->the_post(); get_template_part("include/tax-item"); endwhile; ?>get_template_part("include/tax-item"); – в файле tax-item.php я вывожу содержимое записи, которое нужно мне для отображения записей внутри цикла (заголовок, миниатюру, дату, цитату и т.д.)
Этот вариант выводит все записи Articles на странице, не зависимо от таксономий (категорий).
А если нам нужно вывести каждую категорию отдельно со своими новостями, тогда используем первый вариант, описанный выше.
При этом, если вы используете плагин Yoast SEO и используете его хлебные крошки:
Тогда при выборе в настройках плагина таксономии “Articles Category” в “Taxonomy to show in breadcrumbs for post types”, в хлебных крошках вы получите ссылку на категорию, к которой принадлежит Новость, при других вариантах вывода кастомных записей это не получалось сделать.
На сегодняшнем уроке мы познакомимся с понятием custom post type , а также научимся создавать свой кастомный post type и шаблон для него. Custom post type это одно из основных направлений в WordPress , с которым работают разработчики.
В WordPress-е блоге посты и страницы - все это post type и чтобы расширить функционал, разработчику нужно добавлять новые post type . Например у вас сайт для продажи книг, вы же не будете публиковать эти книги, как блог-посты. Для этого вы создадите новый post type с названием "book" , у которого будет свой внешний вид, свой шаблон и свои настройки.
Сегодня мы создадим свой post type под названием "book" , который будет иметь кастомный шаблон для публичного поста и для страницы с архивами. Давайте сначала ознакомимся с документацией WordPress - Codex/Post Type . Первым делом в кодексе перечислены все названия в (Default Post Types) , которые мы не можем использовать при регистрации новых названий постов.
Для создания кастомных постов в WordPress существует специальная функция - register_post_type() . Разберем на примере ниже.
Функция register_post_type подключается к ядру WordPress-а при помощи другой функции-хука - add_action . Хук это крючок, за который мы цепляем нашу функцию к ядру WordPress , который при инициализации своих функций, добавляет и нашу.
Давайте попробуем зарегистрировать наш post type , скопируем кусок кода из примера выше и вставим его в файл function.php , стартовой темы underscore , которую мы установили на прошлом уроке и назвали my_theme - "Файлы темы Wordpress" . Сделать это можно через админку WordPress-а в теме, Внешний вид / Редактор , открываете файл function.php и вставляете код из кодекса внизу документа.
Разберем подробнее этот код. WordPress регистрирует post type при помощи функции register_post_type . В круглых скобках передаются параметры, первый параметр acme_product - это id нового типа поста, который мы меняем на свой book .
Register_post_type("book",
За ним идет параметр, который получает эта функция, это массив настроек, в примере их всего три, а в документации гораздо больше. Переименуем "Products" на "books" , а "Product" на "book" .
Array(
"labels" => array(
"name" => __("books"),
"singular_name" => __("book")
),
Public означает, что пост публичный, его видят все и он попадает в архив has_archive .
"public" => true,
"has_archive" => true,
)
Обязательно выше кода пропишите комментарии, что это за код, чтобы самим потом не забыть, зачем вы туда его поставили.
/*** My blog custome code.
*/
Сохраняем пост идем в консоль админки и видим новый тип поста book , однако он с минимальным количеством настроек.
На странице codex вы увидите полный список настроек. Нам надо добавить возможность добавления превью-картинки, передадим в массиве параметр "thumbnail" . Кроме того, вернем назад title и editor .
"supports" => array("title", "editor", "thumbnail"),
Точно так же можно добавлять и другие настройки из документации. Рекомендуется для пользовательских названий, в том числе и для post type применять префиксы (my_book) , чтобы избежать конфликта с другими плагинами, ведь названия могут совпасть. Для избежания ошибок WordPress рекомендует все вами разработанные функции, переменные, id , классы и константы прописывать с префиксами.
Кастомный шаблон для нового post type
Создадим два поста в новом типе записей book с названиями Book 1 и Book 2 и откроем сайт по адресу http://my_blog.com/book/.
Мы видим, что загрузился нами созданный post type book , а не дефолтный post type WordPress-а , но загружаются все равно старый archive.php , а нам надо создать свой, вместо дефолтного. Мы хотим, чтобы книги не находились в блог постах, а выглядели иначе, без типичной блоговой структуры. Создадим пустой файл archive-book.php и подключим к нему шапку,
get_header();
?>
get_footer();
?>
и сделаем вывод контента в цикле, скопировав код из раздела документации Post_Types , заменив "product" на "book" .
$args = array("post_type" => "book", "posts_per_page" => 10);
$loop = new WP_Query($args);
while ($loop->have_posts()) : $loop->the_post();
the_title();
echo "
the_content();
echo "
endwhile;
?>
Аналогичный действия надо сделать и для файла single.php .
Общеизвестно, что контент является основным компонентом любого веб-сайта. 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-пользователя, учитывая наличие подробной документации.
$post_type (строка ) то, как вы хотите назвать свой тип поста, это название в дальнейшем будет использоваться в параметрах многих функций, учтите это. Кроме того, нельзя использовать в качестве названий следующие зарезервированные вордпрессом слова:
- attachment
- revision
- nav_menu_item
- custom_css
- customize_changeset
- action
- order
- theme
- author
По умолчанию: значение аргумента public . exclude_from_search (логическое )
- true — исключить записи данного типа из результатов поиска на сайте,
- false — не исключать.
По умолчанию: противоположные значения параметра public .
show_in_nav_menus
(логическое
) нужно ли элементы данного типа записей сделать доступными для добавления в меню сайта.
По умолчанию: значение аргумента public .
show_ui
(логическое
) нужно ли добавлять стандартный интерфейс в админке для редактирования и добавления записей данного типа.
По умолчанию: значение аргумента public .
Show_in_menu
(логическое
|строка
) нужно ли добавлять пункты в меню админки.
По умолчанию: значение аргумента show_ui . show_in_admin_bar (логическое ) нужно ли добавлять ссылку на создание новой записи данного типа в админ панель.
По умолчанию: значение аргумента show_in_menu . menu_position (целое число ) порядок расположения в меню в админке.
menu_icon (строка ) абсолютный URL иконки для меню. Оптимальное разрешение изображения 16×16 пикселей.Кроме того, в WordPress 3.8 появился встроенный пакет иконок — вы можете использовать любую из этих иконок, просто указав её название в качестве значения параметра, например dashicons-cart .
По умолчанию используется иконка обычных записей.
delete_with_user
(логическое
) при удалении пользователя на блоге, нужно ли автоматически удалять все записи данного типа, которые он опубликовал.
По умолчанию: false .
hierarchical
(логическое
) должен ли данный тип постов иметь иерархию.
По умолчанию: false .
has_archive
(логическое
|строка
) должен ли данный тип постов иметь собственную страницу архивов. В качестве значения параметра можно указать ярлык страницы архивов.
По умолчанию: false .
rewrite
(массив
|логическое
) устанавливает правила для постоянных ссылок в URL. Если в качестве значения данного параметра указать false , то правила для постоянных ссылок создаваться не будут.
Slug (строка ) ярлык, используемый для записей данного типа (по умолчанию — название типа поста) with_front (логическое ) нужно ли добавлять в постоянные ссылки значение $wp_rewite->front (по умолчанию — true) feeds (логическое ) нужно ли создавать RSS ленту для данного типа поста (по умолчанию — значение параметра has_archive) pages (логическое ) нужно ли разрешить постраничную навигацию в постах регистрируемого типа, используя тег (по умолчанию — true) supports (массив ) какие нужно добавить на страницы редактирования записей данного типа.
- title — поле для ввода заголовка поста
- editor — текстовый редактор
- excerpt — метабокс «Цитата»
- author — метабокс «Автор»
- thumbnail — метабокс «Миниатюра записи» (кроме того, ваша тема должна их поддерживать)
- comments — метабокс «Комментарии» (если указано, то разрешены комментарии к постам регистрируемого типа)
- trackbacks — метабокс «Отправить обратные ссылки»
- custom-fields — метабокс «Произвольные поля» (произвольные поля будут поддерживаться в любом случае)
- revisions — метабокс «Редакции» (если указано, то в базе данных будут создаваться редакции постов данного типа)
- page-attributes — метабокс «Атрибуты страницы» с возможностью выбора родительского эоемента и установления порядка menu_order
- post-formats — метабокс «Формат», про форматы постов читайте подробнее . taxonomies (массив ) массив таксономий, например category или post_tag , которые будут использоваться для данного типа записей. Присвоить таксономии можно также при помощи функции .
Пример регистрации типа поста
Если не знаете, куда вставлять код — вставляйте в functions.php вашей текущей темы.
add_action
( "init"
, "true_register_products"
)
; // Использовать функцию только внутри хука init
function
true_register_products()
{
$labels
= array
(
"name"
=> "Товары"
,
"singular_name"
=> "Товар"
, // админ панель Добавить->Функцию
"add_new"
=> "Добавить товар"
,
"add_new_item"
=> "Добавить новый товар"
, // заголовок тега |
Доброго времени суток, дорогие хабравчане, я уже много лет делаю сайты на wordpress и решил поделится своим опытом. Мне сильно порадовала новость ранее опубликованная aleksandrit , о том что "WordPress используется уже на более чем 50 миллионах сайтов ", это новость вдохновляет все больше изучать глубокие и скрытые возможности Wordpress. Ранее подобная тема уже была опубликована bRuz ом но я бы хотел подойти к вопросу иначе, шаг за шагом.
И так начнем с очевидного.
Зачем нужны custum post type
Главная цель custum post type позволить разработчику организовать данные на сайте. например: если речь идет о блоге, то у нас есть несколько типов данных(записи, медиафайлы, страницы и ссылки). Но что делать тем у кого сайт посвящен? новинкам кино индустрии? подобному сайту понадобится такой тип записей как «Обзор», у обзора должны быть такие характеристики как: жанр, год выпуска, обложка, актеры и т.д… Использования custum post type в отличие от обычных записей, дает нам возможность использовать эти данные в шаблоне, а так же искать по определенным параметрам и сортировать.Начнем создавать
Для того чтоб создать новый тип записи нам понадобится редактировать файл functions.php который находится в директории используемого шаблона.Function create_post_type() { // создаем новый тип записи
array(
"labels" => array(
"name" => __("Обзоры"), // даем названия разделу, для панели управления
"singular_name" => __("Обзор") // даем названия одной записи
),
"public" => true,
"menu_position" =>
"rewrite" => array("slug" => "reviews") // указываем slug для ссылок например: http://mysite/reviews/
);
}
И так что получилось,
Обратите внимания на то что в левой панели появилась вкладка обзоры.
Как мы видим на этой картинке у нас появились пару проблем. заголовок все еще остался таким «Добавить запись» и нету возможности добавить обложку. Попробуем это исправить, для этого нам понадобится добавить пару параметров (полный список параметров ищите в кодексе).
function create_post_type() { // создаем новый тип записи
register_post_type("reviews", // указываем названия типа
array(
"labels" => array(
"name" => __("Обзоры"), // даем названия разделу для панели управления
"singular_name" => __("Обзор"), // даем названия одной записи
"add_new" => _x("Добавить новый"),// далее полная русификация админ. панели
"add_new_item" => __("Добавить новый обзор"),
"edit_item" => __("Редактировать обзор"),
"new_item" => __("Новый обзор"),
"all_items" => __("Все обзоры"),
"view_item" => __("Просмотр обзора"),
"search_items" => __("Поиск обзора"),
"not_found" => __("Нет обзоров"),
"not_found_in_trash" => __("обзоры не найдены"),
"menu_name" => "Обзоры"
),
"public" => true,
"menu_position" => 5, // указываем место в левой баковой панели
"rewrite" => array("slug" => "reviews"), // указываем slug для ссылок например: http://mysite/reviews/
"supports" => array("title", "editor", "thumbnail", "revisions")
// тут мы активируем поддержку миниатюр
);
}
Add_action("init", "create_post_type"); // инициируем добавления типа
Результат:
И так, теперь мы полностью исправили русификацию и сделали возможным прикрепления миниатюр к нашему новому типу записи. теперь мы можем создать шаблон который будит показывать наши записи.
Loop
Если честно, мне приходят в голову два способа отображения нового типа записи. и так примеры:Первый способ: использовать шаблонный файл, допустим тип новой записи называется "reviews", в этом слачае мы создаем файл под названием archive-reviews.php для отображения множество записей и single-reviews.php для отображения одной записи (оффтоп. приятный пример иерархии всех шаблонов прекрасно отображён на данной инфограме) далее мы используем простой код итерации по записям:
стандартная итерация по массиву
the_title();// заголовок
echo "";
the_content();// запись
echo "";
endwhile;
Второй способ:
вызов лупа из любой части шаблона,
$args = array("post_type" => "reviews", "posts_per_page" => 10);//тут мы указываем на тип записи по которой желаем пройтись и количество записей на одной странице
$loop = new WP_Query($args);// получаем результат запроса в переменное loop
while ($loop->have_posts()) : $loop->the_post(); // далее стандартная итерация по массиву
the_title();// заголовок
php the_post_thumbnail(array(150,150)); //получаем миниатюру записи
echo "";
the_content();// запись
echo "";
endwhile;
Надеюсь вам понравилось и статья была полезной, все же первый пост. с появлением столь простого инструмента, wordpress стал полноценным cms хотя все еще позиционирует себя как блог.
В следующий раз я хотел бы раскрыть такую прекрасную функцию как Taxonomies и custom fields
Теги: wordpress, cms, разработка сайтов, wordpress 3.3