Записи и страницы в WordPress используются для передачи динамического контента приложениям. Введение произвольных типов данных заметно расширило возможности разработки комплексных приложений на базе WordPress.
Вообще, стандартные записи перед своей публикацией на сайте или в приложении проходят через фиксированный поток операций. Во время данного процесса записям присваиваются различные статусы, которые затем обрабатываются внутри WordPress.
Статусы записей могут использоваться в качестве мощного средства для управления контентом в веб-приложениях. В данной статье мы поговорим о том, как использовать произвольные статусы и переходы WordPress для создания приложений, выходящих за рамки обычных веб-сайтов или блогов.
Был ли у вас опыт работы с переходами статусов записей? Вы можете обсудить полученный опыт в комментариях.
Статусы записей в WordPress
WordPress использует таблицу wp_posts для хранения записей и страниц. Статус записи определяет ее временное состояние, которое длится до тех пор, пока она не будет опубликована на веб-сайте. В целом, начальный статус записи – это черновик (draft), который затем переключается на другие статусы. Давайте взглянем на текущий список статусов в WordPress и их функционирование.
- publish – запись опубликована и публично доступна на сайте;
- pending – запись ожидает рассмотрения пользователем с более высокой ролью. Данный статус в основном используется на сайтах, которые имеют многочисленных авторов или пользователей, способных вносить записи в таблицу wp_post.
- draft – запись временно сохранена, и ее автор может внести дополнительные изменения в эту запись перед публикацией.
- auto-draft – запись временно сохраняется, однако не содержит в себе контента. Ее автор может внести дополнительные изменения в эту запись перед публикацией.
- future – запись запланирована к публикации на определенную дату. Это одна из популярных методик, позволяющих поддержать постоянство публикации.
- private – запись видна только зарегистрированным пользователям.
- inherit – определяет ревизию записи. WordPress позволяет создавать многочисленные ревизии одной и той же записи.
- trash – запись, которая отправлена на удаление.
Каждая запись в самом начале имеет статус draft или auto-draft, после чего ее статусы прогрессируют до своего финального состояния. В следующем разделе мы рассмотрим переходы статусов записей, а также их использование.
Работа с переходами статусов записей
Переход статуса записи – это процесс переключения от одного статуса к другому. Существующие переходы записей и связанная с ними функциональность обрабатывается внутри WordPress. Однако есть много эффективных способов добавить разные возможности с помощью переходов записей. WordPress на данный момент обеспечивает хуки для работы со всеми переходами статусов записей; к примеру, мы можем динамически добавлять новые возможности при переходах записей.
Давайте посмотрим, как это работает на практике.
Предположим, что мы хотим сделать что-либо, когда статус записи меняется с draft на future. Следующий код демонстрирует, как применить переход статусов записи для обработки нашего предположения.
function callback_function_name( $new_status, $old_status, $post ) { // Code here } add_action( 'draft_to_future', 'callback_function_name', 10, 3 );
WordPress предлагает хук в формате {old-status}_to_{new-status} для каждого перехода записей. Мы можем использовать функцию обратного вызова для реализации любой функциональности. Эта функция получает в качестве своих параметров старый статус, новый статус, а также измененную запись.
В предыдущей секции мы описали восемь предопределенных статусов записей. В данном случае у нас есть девять статусов для переходов, включая статус, который называется new. Перед тем как запись будет сохранена, она находится в состоянии new. Как только запись попадает в базу данных, происходит переход new_to_{custom status}.
Давайте взглянем на все переходы, которые обычно совершаются при публикации записи:
Эти переходы характерны для сайтов с одним автором. Ход работы со статусами и их переходы представлены в виде стрелок. Для сайта с одним автором переходы достаточно просты, по сравнению с переходами для сайтов с многочисленными авторами.
Давайте посмотрим, как будет выглядеть процесс публикации записи на сайте с многочисленными авторами:
Как вы можете видеть, на сайте с многочисленными авторами процесс публикации несколько изменен – все записи перед публикацией должны быть просмотрены и одобрены доверенным лицом. Именно по этой причине процесс перехода статусов включает в себя дополнительный шаг.
На данный момент мы изучили стандартные переходы статусов для WP-сайтов. Теперь возникает вопрос: как извлечь выгоду из этих переходов?
Есть много способов использования переходов статусов записей в приложениях. Давайте взглянем на базовую функциональность, которая привязана к переходам:
- от Draft к Pending – уведомляет редактора о необходимости просмотра записи;
- от Pending к Future – уведомляет автора записи;
- от Pending к Future – добавляет запись к календарю записей на сайте;
- от Future к Publish – уведомляет подписчиков через email.
Это лишь самый основной функционал, который совершается во время переходов записи. Вплоть до текущего момента мы видели только процесс переходов для предопределенных статусов.
Реальная ценность переходов заключается в использовании произвольных статусов записей. В следующем разделе мы посмотрим на то, как применить произвольные статусы записей в веб-приложениях.
Введение в произвольные статусы записей
WordPress медленно перерос во фреймворк для разработки веб-приложений, выйдя за пределы обычной системы управления контентом. Произвольные статусы записей жизненно важны для проектирования сложных приложений. WordPress позволяет создавать свои собственные статусы записей, а также поддерживает переходы между этими статусами. Давайте взглянем на следующий код, предназначенный для создания произвольного статуса:
function add_custom_post_status() { register_post_status( 'custom_status', $args ); } add_action( 'init', 'add_custom_post_status' );
Произвольные статусы записей могут быть определены через функцию register_post_status, которая принимает название статуса записи в качестве обязательного параметра. Синтаксис напоминает код, используемый для создания произвольного типа записей. Мы также может передавать дополнительные аргументы в зависимости от наших целей. Вы можете найти полный список аргументов в кодексе WordPress. Как только код, представленный выше, будет выполнен, новый статус добавится к списку уже существующих.
Разъяснение процесса привязки произвольных статусов записей к панели администратора выходит за рамки этой статьи, потому я буду использовать уже существующий плагин, чтобы показать вам, как работать с произвольными статусами.
Привязка произвольных статусов записей к панели администратора
В целом, мы должны настроить существующее мета-поле отправки записей, чтобы оно выводило произвольные статусы в выпадающем списке Status. На текущем этапе развития WordPress поддержка этой возможности очень ограничена; следовательно, очень сложно найти качественные плагины для того, чтобы работать с произвольными статусами.
Мы будем использовать плагин Edit Flow для управления произвольными статусами. Вы можете скачать копию этого плагина по ссылке. После активации переходим в раздел Custom Statuses в меню Edit Flow.
Мы увидим следующий экран:
Мы можем использовать эту форму для создания произвольных статусов. Плагин использует внутреннюю функцию register_post_status для определения произвольного статуса, после чего этот статус сохраняется в таблице wp_terms. Управление статусами производится в самом плагине.
В идеале мы хотели бы видеть такие возможности в ядре WP. После создания статуса вы можете увидеть список новых статусов:
Теперь статусы готовы к работе. Вы можете перейти к экрану создания записей и выбрать необходимый статус перед сохранением записи. Затем вы сможете применить переходы статуса записи для добавления новых возможностей или управления существующими возможностями.
Использование переходов статусов в веб-приложениях
Мы можем использовать произвольные типы записей в веб-приложениях. Произвольные статусы играют важную роль в обслуживании произвольных типов записей.
Зачастую существующие типы записей очень ограничены по сравнению с произвольными типами записей; мы будем использовать переходы произвольных статусов для управления состоянием произвольных записей. Давайте посмотрим на практические сценарии, чтобы понять необходимость применения произвольных статусов записей.
Система продажи онлайн-продуктов
Сегодня большинство товаров продается онлайн через интернет-магазины. Существует много разных WP-сайтов для продажи товаров. В системе такого рода нам понадобится произвольный тип записей под названием Products, который будет хранить в себе всю информацию о предлагаемых товарах.
Теперь давайте подумаем, какие из существующих статусов записей могут понадобиться для наших товаров. Статусы draft, future и pending не имеют никакого смысла применительно к продуктам. Таким образом, нам понадобятся новые статусы, отвечающие нашему сценарию. Давайте подумаем о возможных статусах для товаров.
В целом, мы можем использоваться статусы In Stock (в наличии), Ordered (заказан) , Shipped (отправлен), Delivered (доставлен) и Returned (возвращен) для типа записей Products. Давайте посмотрим, какие переходы между ними будут выполнены:
Первый статус продукта — In Stock. Последний — Delivered или Returned. Каждый переход статуса может использоваться для выполнения различных задач. К примеру, когда статус продукта меняется с In Stock на Ordered, мы можем обновить количество запасов. Таким образом, для данного сценария понадобится действие {In stock}_to_{ordered}. Мы можем реализовать подобные действия для каждого перехода статуса, чтобы улучшить процесс заказа товара.
Система управления библиотекой
Еще один сценарий, в котором важную роль играют произвольные статусы записей. В библиотечной системе статус книги меняется в зависимости от действий, выполненных посетителями библиотеки. В такой системе книги могут получать статусы Borrowed (взята), Renewed (продлена), Available (доступна) и Overdue (просрочена). Давайте взглянем на следующий скриншот, демонстрирующий возможные переходы статусов.
В данном сценарии переходы статусов стали гораздо сложнее по сравнению с предыдущим сценарием. Книга получает начальный статус – Available, и переключается между разными статусами до тех пор, пока снова не станет доступной. Давайте рассмотрим сценарий использования переходов статусов для данной системы.
В целом существует максимальный предел для количества продлений отдельной книги. Таким образом, когда статус книги меняется с Renewed к Available, мы можем проверить аккаунт посетителя, достиг ли он максимального предела продлений, и если да, то блокировать его для новых продлений.
В данном разделе мы рассмотрели два сценария, которые требуют переходов статусов. Реальные приложения гораздо более комплексные, потому вы найдете разные ситуации для применения переходов статусов.
Заключение
Переходы статусов записей – мощный способ добавления новых возможностей или обслуживания потока операций в приложениях, однако указанная техника не лишена некоторых недостатков. Достаточно рассмотреть ситуацию, когда вам нужно отправить огромное количество уведомлений в единственном переходе статуса.
В таких случаях вы не сможете закончить переход статуса, пока не будут отправлены все уведомления, следовательно, запись будет очень тяжело опубликовать. В целом, переходы статусов не должны использоваться для массивных процессов, которые занимают заметное время. Вам следует мудро выбирать необходимый способ решения задач, основываясь на своих требованиях.
Источник: wp.tutsplus.com