Статьи

Настраиваемые типы сообщений с настраиваемыми мета-блоками

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

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

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

ТАМОЖЕННЫЕ ВИДЫ ПОЧТОВ

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

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

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

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

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

ПОЛЬЗОВАТЕЛЬСКИЕ МЕТА БЛОКИ

Custom Meta Boxes – это скрипт, который делает процесс создания этих мета-боксов невероятно простым. Кроме того, он взял некоторые из более сложных типов полей (такие как средства выбора цвета, средства выбора даты и редакторы WYSIWYG) и выполнил все кодирование за вас, так что все, что вам нужно сделать, это указать, какого типа должно быть каждое поле, и оно будет волшебным образом появляются.

Включить его в свою тему или плагин – очень простой процесс. Все, что вам нужно сделать, это загрузить файлы из репозитория GitHub и скопировать их в структуру папок вашей темы или плагина. Я рекомендую поместить файлы в библиотеку или папку “Включает” для лучшей организации. В своих плагинах я загружаю все файлы в / wp-content / plugins / my-plugin / includes / metabox /.

После того, как все файлы и папки были загружены в выбранное вами место, все, что вам нужно сделать, чтобы «активировать» их и сделать доступными для использования, – это включить init.php из вашего плагина. Например, в моем примере в основной файл плагина была включена следующая функция для вызова init.php в папке / includes / metabox /:

function be_initialize_cmb_meta_boxes() { if (!class_exists( 'cmb_Meta_Box') ) { require_once( 'includes/metabox/init.php' ); } } add_action( 'init', 'be_initialize_cmb_meta_boxes', 9999 );

Теперь вы можете фактически использовать функциональность, предоставляемую скриптом. Example-functions.php – отличное место для начала изучения того, как работает скрипт. Он предоставляет пример синтаксиса, необходимого для включения каждого типа поля, допускаемого сценарием. Вы можете выбрать следующие типы полей:

  • Заголовок (для организации ваших мета-боксов на панели управления)
  • Текст (маленький, средний и большой)
  • Выбор даты (стандартная или временная метка UNIX)
  • валюта
  • Текстовая область (маленькая и большая)
  • Падать
  • Радиокнопки (встроенные и стандартные)
  • Флажок (одиночный и множественный)
  • Редактор WYSIWYG
  • Средства выбора таксономии (раскрывающийся список, флажки или переключатели)
  • Загрузчик файлов
  • Список файлов

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

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

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

Следующая функция – это весь код, который ее выполняет: вы заметите, что она соответствует формату файла example-functions.php. Я опишу каждую часть кода после:

function twpb_alerts_metaboxes( $meta_boxes) { $prefix = 'twpb_alert_'; // Prefix for all fields $meta_boxes[] = array( 'id' => 'alert_metabox', 'title' => 'Alert Information', 'pages' => array('twpb_alerts'), // post type 'context' => 'normal', 'priority' => 'high', 'show_names' => true, // Show field names on the left 'fields' => array( array( 'name' => 'Priority', 'desc' => '', 'id' => $prefix. 'priority', 'type' => 'radio_inline', 'options' => array( array( 'name' => 'High', 'value' => 'high', ), array( 'name' => 'Medium', 'value' => 'medium', ), array( 'name' => 'Low', 'value' => 'low', ), ), ), array( 'name' => 'Description of issue', 'desc' => 'Enter a description of what the issue is.', 'id' => $prefix. 'description', 'type' => 'wysiwyg', 'options' => array( 'textarea_rows' => 5, ), ), array( 'name' => 'Proposed resolution', 'desc' => 'Inform users how they can resolve the issue.', 'id' => $prefix. 'resolution', 'type' => 'wysiwyg', 'options' => array( 'textarea_rows' => 5, ), ), ), ); return $meta_boxes; } add_filter( 'cmb_meta_boxes', 'twpb_alerts_metaboxes' );

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

В строке 10 начинается массив полей, которые я хочу создать. В этом примере всего три поля (строки 11-21, 22-28 и 29-35). Каждое поле включает основную информацию о том, что это за поле, уникальный идентификатор для него и описание, а также некоторые параметры, где это необходимо.

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

РЕЗУЛЬТАТ?

Так как же это выглядит? Что ж, в окне редактора вы получите что-то вроде этого:

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

ОТОБРАЖЕНИЕ ИНФОРМАЦИИ

Информация теперь сохраняется для каждого сообщения в базе данных. Но если мы не обратимся к нему, он останется в базе данных и останется бесполезным. Чтобы отобразить информацию, нам нужно использовать функцию get_post_meta, которая извлекает мета поста для данного поста из базы данных.

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

<h2>Priority: <?php echo get_post_meta( $post->ID, 'twpb_alert_priority', true ); ?></h2> <h3>Description</h3> <?php echo get_post_meta( $post->ID, 'twpb_alert_description', true ); ?> <h3>Resolution</h3> <?php echo get_post_meta( $post->ID, 'twpb_alert_resolution', true ); ?>

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

Это даст результат на передней панели в следующем виде:

Настраиваемые типы сообщений с настраиваемыми мета-блоками

ДАЛЬШЕ

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

Как только вы начнете открывать для себя такие мощные функции, которые встроены в WordPress и которые поначалу могут показаться немного ошеломляющими, вы понимаете, насколько мощными они могут быть. Будем надеяться, что такие инструменты, как Custom Meta Boxes, побудят вас окунуться в мир и начать разработку своих собственных сайтов с высокой степенью адаптации.

Кнопка «Наверх»