WordPress post type


Доброго времени суток, дорогие хабравчане, я уже много лет делаю сайты на wordpress и решил поделится своим опытом. Мне сильно порадовала новость ранее опубликованная aleksandrit, о том что "WordPress используется уже на более чем 50 миллионах сайтов", это новость вдохновляет все больше изучать глубокие и скрытые возможности WordPress. Ранее подобная тема уже была опубликована bRuzом но я бы хотел подойти к вопросу иначе, шаг за шагом.

И так начнем с очевидного.

Зачем нужны custum post type

Главная цель custum post type позволить разработчику организовать данные на сайте. например: если речь идет о блоге, то у нас есть несколько типов данных(записи, медиафайлы, страницы и ссылки). Но что делать тем у кого сайт посвящен? новинкам кино индустрии? подобному сайту понадобится такой тип записей как «Обзор», у обзора должны быть такие характеристики как: жанр, год выпуска, обложка, актеры и т.д… Использования custum post type в отличие от обычных записей, дает нам возможность использовать эти данные в шаблоне, а так же искать по определенным параметрам и сортировать.

Начнем создавать

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



function create_post_type() { // создаем новый тип записи
register_post_type( 'reviews', // указываем названия типа
array(
'labels' => array(
'name' => __( 'Обзоры' ), // даем названия разделу, для панели управления
'singular_name' => __( 'Обзор' ) // даем названия одной записи
),
'public' => true,
'menu_position' => 5, // указываем место в левой баковой панели
'rewrite' => array('slug' => 'reviews') // указываем slug для ссылок например: http://mysite/reviews/
)
);
}

add_action( 'init', 'create_post_type' ); // инициируем добавления типа

И так что получилось, image
Обратите внимания на то что в левой панели появилась вкладка обзоры.

image

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


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' ); // инициируем добавления типа

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


habr.com

Здравствуйте, уважаемые читатели XoZbloga! Система управления сайтом 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 функции стали доступны всем.


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


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

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

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

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

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



Meta boxes - область для ввода дополнительных данных

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

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

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

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

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

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

Итак мы добавили несколько опций в массив $args:

  • 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.

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


Интерактивное оповещение пользователей

Контекстные подсказки

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

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



Контекстные подсказки

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

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

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

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


Пользовательская таксономия (Категории продуктов)


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

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

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

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

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

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

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

  • 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 — по-умолчанию).

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

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

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

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

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


Meta Boxes

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

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

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

Для отображения используется файл archive-[post_type].php (в нашем случае archive-product.php) если такой существует. Иначе, для отображения будет использован archive.php и если такой файл отсутствует в теме, то будет использовать index.php.

Еще один способ отображения записей пользовательского типа, это использование запроса класса WP_Query. В простой форме это выглядит примерно так:

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

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

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

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

xozblog.ru

Добавление произвольных типов записей в wordpress

Добавить произвольные типы записей можно вручную — прописав нужный код в файле functons.php (что не рекомендуется) или создав свой специальный плагин. Или можно воспользоваться специальными плагинами. Результат будет один и тот же. Я специально сначала изучил как работает добавление кастомных типов записей через код, и потом попробовал делать тоже самое с использованием готовых плагинов. Должен сказать что пользоваться специальными плагинами намного удобнее, и быстрее. А результат получается одинаковый. Поэтому в это уроке мы рассмотрим использование плагинов.

Первое. Установка плагина

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

Скачиваем и устанавливаем на свой WordPress сайт плагин Types. Его будет достаточно.

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

Установив, открываем в левом меню раздел плагина Types → пункт Типы и таксономии.

Нажимаем на кнопку «Добавить новый индивидуальный тип публикации». Заполняем поля. Сохраняем. Главное заполнить первый блок «Название и описание». Далее можете заполнить поля и отметить галочки по желанию. В принципе по ним все понятно из названия пунктов. Вот пример как я заполнял поля для создания раздела «Фильмы».

rightblog.ru

 Руководство по созданию пользовательских типов постов в WordPress

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

На практике, пользовательские типы сообщений были введены давно, а точнее с 17 февраля 2005 года, когда в WordPress 1.5 была добавлена поддержка статических страниц, и добавлено поле post_type в базу данных.

Функция wp_insert_post() была еще в WordPress 1.0, так что после того как поле post_type было добавлено в версии 1.5, вы можете просто установить нужное значение в поле post_type при добавлении записи. Конечно, для создания и управления пользовательскими типами сообщений требуется гораздо больше, чем просто добавления нужного значения в поле post_type, однако объем необходимого кодирования постоянно уменьшается, так как функции WordPress становятся все более и более гибкими.

Начиная с версии 2.9, функция register_post_type() и некоторые другие полезные методы стали доступны каждому. На данный момент, трудоемкое кодирование и хаки не нужны, чтобы сделать WordPress полномасштабной CMS, и вы можете использовать множество мощных встроенных функций.

Пользовательский тип записи — это не более чем обычный пост с другим значением в поле post_type в базе данных. Тип поста для обычного сообщения — это post, для страниц используется тип page, аттачменты используют тип attachment, и так далее. Теперь же вы можете создавать свои собственные типы  для созданного контента. Вы можете создавать пользовательские типы сообщений, например, для книг, фильмов, рецензий, продуктов и так далее.

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

  • Пользовательский тип записей будет отображаться в админке в виде отдельного пункта меню со своим собственным списком постов и пунктом «добавить новую» запись.
  • Переход по http://mysite.com/customposttype/ приведет вас на страницу архива для этого типа записей.
  • Категории и теги могут быть также сделаны доступными для пользовательских типов сообщений, или вы можете создать пользовательскую таксономию.

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

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

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

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

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

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

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

labels: параметр labels должен содержать массив, определяющий различные надписи, необходимые  для пользовательского типа записи.
description: краткое описание для нашего пользовательского типа записи, для чего мы его используем.
public: этот опция управляет массой вещей одновременно. Установка её как true включает массу других опций. Подробнее об этом позже.
menu_position: определяет позицию меню пользовательского типа поста в админке. Чем больше значение вы установите, тем ниже меню будет размещено.
supports: эта опция устанавливает элементы управления WordPress, которые доступны на странице редактирования для пользовательского типа поста. По умолчанию, только поле title и редактор показаны. Если вы хотите добавить поддержку для комментариев, ревизий, миниатюр и пр., вы должны будете указать их здесь. Для получения полного списка возможных параметров смотрите документацию.
has_archive: если установлено как true, то URL для данной категории будет в виде mysite.com/posttype/ (по умолчанию)

Руководство по созданию пользовательских типов постов в WordPress

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

Пользовательские информационные сообщения

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

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

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

Контекстная справка

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

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

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

Напомним, что мы использовали три функции для создания «полноценного» пользовательского типа поста. Мы использовали функцию  register_post_type() для создания собственного типа поста и два хука — contextual_help и post_updated_messages — для создания полезной справки и релевантных сообщений, соответственно.

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

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

Эта проблема вынудила разработчиков создавать пользовательскую таксономию. Вы можете создать отдельную таксономию под названием «Категории продуктов» и использовать её только для продуктов. Кевин Лири написал большую статью о пользовательской таксономии в WordPress, которую я очень рекомендую прочитать.

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

Как видите, код очень поход на предыдущий пример с созданием пользовательского типа постов. Мы добавили некоторые надписи и установили опцию hierarchical равную true. Это позволяет использовать таксономию как категории. При установке этого параметра как false (это по умолчанию), таксономия будет как теги.

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

Руководство по созданию пользовательских типов постов в WordPress

Мета-поля записей

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

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

Justin Tadlock написал подробную статью о пользовательских мета-полях, которая является наиболее полной статьей на эту тему. Я рекомендую прочитать её для глубокого изучения вопроса, но начать вы можете здесь.

Создание мета полей требует трех шагов:

  1. Определить само поле,
  2. Определить содержание мета поля
  3. Определите, каким образом данные из поля обрабатываются.

Определение мета поля

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

  • Уникальный идентификатор для мета поля (оно не обязательно должно совпадать с именем функции),
  • Название мета поля (видимое для пользователей),
  • Функцию, которая будет отображать содержимое поля,
  • Тип поста, которому мета поле принадлежит,
  • Место размещения мета поля
  • Приоритет мета поля (определяет «как высоко» оно будет находится).

Определение содержания мета области:

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

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

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

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

Руководство по созданию пользовательских типов постов в WordPress

Отображения содержимого

Если вы создали сообщение с параметром has_archive установленным как «true», то WordPress будет выводить список этих сообщений на странице архива сообщений этого типа. Если ваш пользовательский тип сообщений называется «book», то вы можете просто перейти по адресу http://mysite.com/books/, и вы увидите список постов этого типа.

Эта страница использует файл archive-[post_type].php для отображения, если он существует (в нашем случае это archive-books.php). Если он не существует, то будет использоваться archive.php, а если и он не существует в папке с темой, то будет использоваться файл index.php.

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

Отображение метаданных

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

Заключение

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

Перевод статьи с smashingmagazine.com

www.webmasters.by

Оглавление

  • Как создать
  • Как добавить дополнительную информацию?
  • Как вывести на странице?

Как создать?

Вообще, (вы удивитесь) wordpress уже содержит несколько примеров типов записей. Таковыми являются:

  • пост (post -> single.php)
  • страница (page -> page.php)
  • вложения они же медиафайлы (attachments)
  • редакции (revisions)
  • элементы меню (nav_menu_item)

Когда вы создаёте свой тип записи, он, как правило, базируется на каком-то уже существующем и наследует поведение встроенного типа. В примере создадим новый тип записи «Новости», взяв за основу обычный пост.

"Wordpress News Example"

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

Что сделали? Зарегистрировали новый тип записи с именем news. В массиве он принимает возможные значения, определяющие то, как будут выводиться названия тех или иных действий при редактировании новостей в административной панели. При этом использовали названия, учитывающие локализацию. Если вы делаете шаблон, не предназначенный для «мультиязычной» аудитории, можно ограничиться наименованиями на русском.

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

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

"Wordpress Custom Post Type"

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

Ну, и наконец пути к нашим новостям будут иметь адрес вида mydomain.com/news/my-first-news. Отлично. Инициализируем новый тип записи при помощи add_action и топаем в админку: обновлять роутинг (сохранить изменения), иначе wordpress не сможет найти страницы с news.

"Wordpress Routing"

Кстати, google требует, чтобы новости оканчивались не красивым названием, а ID. Поэтому иногда нужно знать как переопределить стандартные пути к ним. Сделать это можно в functions.php вот таким хитрым образом:

Как добавить дополнительную информацию?

Иногда помимо добавления самого типа записи требуется расширить его представление в административной панели. К примеру, надо вывести информацию об оригинальном источнике новости. В таком случае придётся обратиться к неким мистическим сущностям wordpress, название которых слабо переводится на русский, (и потому нет желания его коверкать, придумывая неологизмы) это metaboxes.

Что всё это значит:

  • links_meta -> идентификатор
  • Source -> название блока
  • links_meta_callback -> обратный вызов
  • news -> к какому типу записи применить
  • advanced/normal -> в каком месте вывести
  • default/height -> приоритет в контексте других блоков

Какие поля будет включать блок? Обратимся к функции обратного вызова.

Проиллюстрируем сказанное:

"Wordpress Metaboxes"

Наконец, научим metabox запоминать ту информацию, которая была записана в поле.

Как вывести на странице?

Есть два варианта: сделать шаблон по правилам wordpress или же вывести на странице с шаблоном собственным.

Для шаблона, который будет выводить каждую отдельную запись, создадим страницу с именем single-news.php и примерно таким содержанием:

Может так случиться, что для особого типа записи надо будет выводить свой шаблон. Зачем? А там другое оформление или даже разметка. Тогда записываем ещё одну вещь: проверим тип записи, и если он совпадает с нужным, пусть движок использует страницу, отличную от стандартной. Сделаем это для страницы архива, которая не воспринимает указание шаблона а-ля archive-news.

Записи в таком шаблоне выводятся как обычно, без дополнительных запросов с wp_query. ⤧  Следующая запись Адаптивное меню на CSS

www.unix-lab.org

Стандартные типы записей WordPress

Каждый вид записи имеет свой уникальный идентификатор (название).

К стандартным типам записей относятся следующие из них:

Тип записи Уникальный идентификатор
Записи post
Страницы page
Вложения attachment
Ревизии revision
Меню nav_menu_item

Поговорим подробнее о каждом из них

Записи (идентификатор — post)

Данный вид записей является самым используемым и выполняет роль постов блога. Для него предусмотрены две предустановленные таксономии: категории или другое название рубрики (category) и тэги или другое название метки (post_tag). За вывод постов по умолчанию отвечает шаблон single.php

Записи

Страницы (идентификатор — page)

Страницы в целом похожи на обыкновенные записи, но не смотря на это имеют ряд различий:

  1. Страница считается статической единицей, т.е. она не принадлежит ни одной из таксономий;
  2. Страницы могут иметь иерархию. Это значит, что одна страница может быть родительской для другой/других страниц;
  3. Страницы могут иметь свой собственный шаблон вывода. Например, для страницы «Об авторе» может быть следующий шаблон вывода page-about-us.php. Для этого в начале шаблона нужно всего лишь добавить комментарий следующего вида.
    <?php /* Template Name: Об авторе */ ?>

    Далее в админ-панели выбирается нужный шаблон и все. Подробнее с созданием отдельных шаблонов вывода статических страниц Вы можете ознакомиться здесь;

  4. Страницы имеют встроенную возможность сортировки.

За вывод страниц по умолчанию отвечает шаблон page.php

Страницы

Вложения (идентификатор — attachment)

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

Вложения

Редакции (идентификатор — revision)

Редакции — это черновики. Они появляются в процессе обновления постов на блоге. Их предназначение определяется в восстановлении ранее написанных текстов. Также Вы можете при помощи хука wp_revisions_to_keep легко отключить их, путем добавления следующего кода в файл function.php Вашей темы (более подробно об отключении редакций можно прочесть здесь).

  <?php     function deactivate_revisions( $revisions )   {    return 0;  }  add_filter( 'wp_revisions_to_keep', 'deactivate_revisions' );     ?>  

Редакции

Меню (идентификатор — nav_menu_item)

Здесь объяснять особенно и нечего. Меню хранит информацию о всей навигации на Вашем сайте.

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

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

Wordpress post type

Как мы видим, в админ-панели появился новый пункт меню «Магазин» с возможностью добавления новых товаров. Здесь и будут выводиться все наши добавленные товары, которые визуально отделены от общей массы всего контента. Кроме того, для данного типа записей мы с легкостью сможем добавить свои произвольные поля, например, для хранения той же цены. Конечно, можно было в обычных постах создать свою категорию и там хранить все товары, но на мой взгляд такой способ более удобен. К тому же, при таком подходе в обычных записях не будет лишних произвольных полей.

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

А теперь давайте научимся создавать произвольные типы записей. За их создание отвечает функция register_post_type($post_type, $args), которая принимает 2 параметра:

  • $post_type (строка, обязательный) — уникальный идентификатор произвольного типа записей. В нашем случае это будет идентификатор store;
  • $args — массив дополнительных аргументов.

В свою очередь функция register_post_type() цепляется за хук init. Ниже показан пример кода для создания произвольных типов записей.

  <?php     function prefix_register_name() { $labels = array( 'name' => __( 'Магазин', 'text-domain' ),//Основное название типа записей  		'singular_name' => __( 'Товары', 'text-domain' ),//Название для одной записи данного вида  		'add_new' => _x( 'Добавить товар', 'text-domain', 'text-domain' ),//Текст для добавления новой записи  		'add_new_item' => __( 'Добавить товар', 'text-domain' ),//Текст для добавления нового поста. Аналогична тексту "Добавить новый пост" у стандартных записей  		'edit_item' => __( 'Редактировать товар', 'text-domain' ),//Текст для редактирования записи  		'new_item' => __( 'Новый товар', 'text-domain' ),//Текст новой записи  		'view_item' => __( 'Просмотреть товар', 'text-domain' ),//Текст для просмотра записи  		'search_items' => __( 'Найти товар', 'text-domain' ),//Текст для кнопки поиска  		'not_found' => __( 'Товаров не найдено', 'text-domain' ),//Текст, если в результате поиска не была найдена ни одна запись  		'not_found_in_trash' => __( 'В корзине товаров нет', 'text-domain' ),//Текст, если в корзине нет записей  		'parent_item_colon' => __( 'Родительский товар:', 'text-domain' ),//Текст для родительских типов. Применяется для древовидных типов записей  		'menu_name' => __( 'Магазин', 'text-domain' ),//Текст пункта меню  	);    	$args = array(  		'labels' => $labels,//Массив, описанный выше  		'hierarchical' => false,//true - записи имеют древовидную структуру, false - записи имеют обычную структуру  		'description' => 'Магазин по продаже часов',//Описание типа записи  		'taxonomies' => array(),//Таксономии, с которыми нужно связать этот тип записей  		'public' => true,//true - публичный тип записей, false - не публичный тип записей  		'show_ui' => true,//Создавать ли логику управления данным типом записи в админ-панели  		'show_in_menu' => true,//Показывать ли тип записи в меню админ-панели  		'show_in_admin_bar' => true,//Делает тип записи доступным из меню  		'menu_position' => null,//Позиция расположения пункта меню в админ-панели  		'menu_icon' => null,//Иконка для пункта меню в админ-панели  		'show_in_nav_menus' => true,//Включить данный тип записи в навигацию, чтобы записи можно было выбирать в меню  		'publicly_queryable' => true,//true - запросы, относящиеся к этому типу записей будут работать на фронтенде сайта, false- нет  		'exclude_from_search' => false,//Исключить данный тип записи из поиска  		'has_archive' => true,//Нужна ли поддержка страниц архивов  		'query_var' => true,//Включает/Выключает возможность запросов  		'can_export' => true,//Можно ли экспортировать данный тип записей  		'rewrite' => true,//true - использовать ЧПУ для этого типа записей, false - нет  		'capability_type' => 'post',//Строка которая будет маркером для установки прав для этого типа записи. Встроенные маркеры это: post и page.  		'supports' => array(//Поля необходимые при создании данного типа записей  			'title',//блок заголовка  			'editor',//блок ввода контента  			'author',//возможность выбора автора поста  			'thumbnail',//блок миниатюры поста  			'excerpt',//поле ввода краткого описания поста (цитаты)  			'custom-fields',//произвольные поля  			'trackbacks',//блок уведомлений  			'comments',//блок комментариев поста  			'revisions',//ревизии поста  			'page-attributes',//атрибуты постоянных страниц  			'post-formats'//форматы записей, при условии, что они включены в теме  			)  	);    	register_post_type( 'store', $args );  }    ?>  

Этот код добавляем в файл functions.php Вашей темы и в админ-панели WordPress можно будет увидеть новый пункт меню с созданным Вами типом записей.

На этом все. Надеюсь, что данный материал стал для Вас полезным. Всем удачи!!!

wordpressrus.ru

Стандартные типы записей WordPress

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

  • Записи (каждый тип поста имеет отдельное название для использования в коде, у записей это post)
  • Страницы page
  • Вложения attachment
  • Редакции revision
  • Элементы меню nav_menu_item

Что общего у всех этих типов? Все они являются элементами содержимого сайта, имеют какие-либо параметры. Информацию о них можно получить или вывести, например в виде объекта поста WP_Post.

Давайте вкратце рассмотрим каждый из стандартных типов постов, чтобы иметь общее представление о них.

Записи

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

Шаблоном страницы записи является файл темы single.php.

Страницы

О да! Страницы — это потрясающая штука! В целом они похожи на записи, но имеют несколько уникальных особенностей. Итак, страницы:

  • Первое и самое главное — страницы могут использовать произвольный файл из папки с темой в качестве своего HTML/PHP шаблона. Это значит, что в принципе каждая страница может кардинально отличаться от общего дизайна и верстки сайта. Но на самом деле, с версии 4.7 мы можем использовать шаблоны страниц для любого типа поста.
  • Имеют иерархию. Т.е. одна страница может быть родительской для других страниц.
  • Имеется возможность сортировать их по порядку. В принципе каждый тип поста имеет такую возможность, но в страницах этот функционал предусмотрен по умолчанию.
  • При включенных постоянных ссылках на сайте, страницы имеют URL вида http://ваш-сайт.ru/ярлык_страницы, например https://misha.blog/contacts. Если имеются родительские элементы, они также будут включены в URL. Удобно.

В качестве шаблона страницы может быть задействован один из следующих файлов. Файлы указаны в порядке приоритета задействования. Т.е., если файла под номером 1 не существует, то будет задействован файл под номером 2.

  1. {ваш_шаблон}.php файл с произвольным названием, будет использоваться как шаблон страницы, если выбран на странице редактирования страницы.
  2. page-{ярлык_страницы}.php
  3. page-{ID_страницы}.php
  4. page.php

Вложения

Тип поста, предназначенный для управления файлами, загруженными через стандартный вордпрессовский загрузчик, а также для хранения информации о них. Например у изображений это может быть их размер, альтернативный текст (для HTML-атрибута alt) и т.д.

Редакции

Редакции записей — это черновики, которые автоматически сохраняются в процессе редактирования записей (также могут быть использованы и в других типах постов, не только в post). И, если вы вдруг написали в своей статье что-то не то, вы всегда cможете восстановить её старую версию из одной из редакций.

Метабокс с редакциями вы найдёте на странице редактирования любой записи.

Элементы меню

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

Регистрация пользовательского типа поста

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

В качестве примера давайте добавим «Функции WordPress». То есть, нам нужно, чтобы у функций был собственный шаблон страниц, собственные категории, ну, и если мы будем постить по 3 функции в день (к примеру), то нам тем более не надо захламлять RSS-канал.

Всего будет 4 шага создания типа поста. На самом деле, чтобы всё заработало, достаточно и одного-двух этапов, но нам ведь надо, чтобы всё было на высшем уровне.

Шаг 1. register_post_type()

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

Важно: в качестве имени типа поста (первый аргумент функции) нельзя использовать следующие слова: post, page, attachment, revision, nav_menu_item, action, order, theme. Помню случай, когда я пытался зарегистрировать тип поста order и не мог понять, почему ничего не работает.

Этот пример очень упрощён. На моем блоге вы также найдете полную документацию функции register_post_type() с подробным описанием её параметров и их значений.

Если не знаете, куда вставлять код из этого поста, вставляйте всё в файл functions.php. Таких файлов может быть несколько, нам нужен тот, который находится непосредственно в папке с текущей темой.

В результате получаем:

Круто, да?

Шаг 2. Тексты уведомлений для типа постов

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

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

Если вы пропустите этот шаг, то по умолчанию будут использоваться уведомления из записей типа post.

Шаг 3. Вкладка «Помощь»

Вкладка «Помощь» находится в правой верхней части экрана. Для нашего типа поста её ещё пока что нет, но вы сможете найти её на странице редактирования записей например.

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

Следующий код будет работать в версиях WordPress 3.3 и выше. Более старые версии WordPress в данном случае рассматривать не вижу смысла.

При использовании этого кода получаем:

Шаг 4. Обновление постоянных ссылок

Завершающий штрих. Если на вашем сайте включены пермалинки, то, для того, чтобы страницы типа поста корректно отображались (и отображались вообще), переходим в Параметры > Постоянные ссылки и, ничего не меняя, нажимаем «Сохранить изменения».

misha.blog

WordPress Custom Post Types

Итак, зачем нужны произвольные типы записей?

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

Но мощное развитие в последнее время позволило ВордПресс перейди из разряда CMS для блога в разряд многофункциональной системе управления контентом.

Но ближе к делу…

Для примера, нам требуется добавить отзывы клиентов на сайт. И вывести их на главной странице. Можно извернуться и с помощью существующих типов записей. Например, помечать записи тэгом отзывы и потом фильтровать их по этому параметру. Но сразу же возникает куча проблем и вопросов. Например, как скрыть отзывы из общей ленты?

Редактировать темы WordPressСоздадим тип записи Testimonials

Это простейший код из Кодекса, но проще начать с него. Мы добавляем его в файл functions.php, который находится в папке (директории) темы. Так же его можно отредактировать из админки


 

Добавлена функция create_testimonials_post_type() – она регистрирует тип записи и вызывается в перехватчике события WordPress init (через hook). Проще говоря функция add_action( ‘init’, ‘create_testimonials_post_type’ ) запускает  нашу функцию ‘create_testimonials_post_type’  после события init

В стандартную функцию ВордПресс create_post_type() передается 2 параметра –

  1. строка название (ключ), которая должна быть на латинице и не превышать 20 символов. Обязательный
  2. массив аргументов – различных настроек, которых довольно много, но об этом позже.  Не обязательный

Теперь в админке появлятся пункт Отзывы

2На скриншоте видно что переведены не только названия пунктов, но и многие другие надписи. За это отвечает массив labels, в который выше были передан название типа, и название в единственном числе. Давайте добавим остальные параметры.

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

Отображение Custom Post Types

Для примера добавить отзывы в футер сайта – файл footer.php в директории темы. Или можно как и functions.php редактировать из админки напрямую.

Комментарии в коде подсказывают что к чему.

На этом пока всё. На самом деле ВордПресс способен на гораздо большее. И помимо Custom Post Types есть еще и Custom Taxonomies – т.е. произвольные типы разделов. Также можно добавить различные типы полей к различным типам записей. Постараюсь об этом поговорить попозже.

…. и еще одно замечание.

sasha.shestakoff.com


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.