Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress Plugins
Code

Создаём систему пользовательских сообщений WordPress Messaging System, часть 4

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Creating a Custom WordPress Messaging System.
Creating a Custom WordPress Messaging System, Part 3

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

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

Если вы дошли в курсе до этого места, то знаете, что:

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

Как было сказано в предыдущем уроке in the previous tutorial:

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

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

Всё же, начнём

К этому времени вы уже хорошо знаете, что необходимо иметь в вашей локальной среде разработки. В частности, вы должны иметь следующее:

  • PHP 5.6.25 и MySQL 5.6.28
  • Apache или Nginx
  • WordPress 4.6.1
  • Предпочитаемый вами IDE или редактор

Я также рекомендую самую последнюю версию исходного кода the source code, поскольку он позволит внести все изменения, которые мы собираемся сделать. Если у вас его нет, хорошо, но я рекомендую перечитать предыдущие уроки the previous tutorials прежде, чем идти дальше.

В предыдущем уроке

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

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

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

На последнем занятии

В частности, посмотрим, как сделать следующее:

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

Определив вышесказанным рамки нашей работы, давайте двигаться дальше.

Рефакторинг нашей работы

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

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

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

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

1. Удалим старый Settings Messenger

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

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

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

2. Новый класс Setting Message

Во-первых давайте введём Settings_Message класс. Он представит любой тип параметров сообщений, которые мы собираемся описать. То есть это будут успешные сообщения, сообщения об ошибках и предупреждения.

С этой целью мы определим класс, введём одно свойство и затем закрепим в конструкции. Проверьте этот код и я немного поясню ниже:

Обратите внимание, что мы назначили для private атрибут $messages. При создании экземпляра класса мы создаем многомерный массив. Каждый индекс, определяемый successerror или warning, относится к собственному массиву, в котором мы будем хранить соответствующие сообщения.

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

Добавление сообщений

Во-первых, посмотрим, как мы добавляем сообщения:

Это сообщение сначала принимает входящие строки и очищает данные. Затем проверяет, содержатся ли они в успешном сообщении. Если это так, он просто возвращается. Мы же не хотим дублировать сообщения.

В противном случае он добавляет сообщение в коллекцию.

Получение сообщений

Извлечение сообщений происходит в двух формах:

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

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

Странно звучит? Держитесь меня и я всё объясню. Первое, на чём мы сосредоточимся, это как отображать сообщения по типу (в смысле, успех, ошибка или предупреждение). Вот код для этого (и он должен выглядеть знакомо):

Заметим, что мы используем многое из  кода прошлого урока; однако мы обобщили его так, что он похож на входящий $type и динамически применяет его к разметке.

Так мы обойдёмся одним приёмом для отображения наших сообщений. Хотя ещё не всё. А что если нам надо получить все сообщения? Это можно отобразить на странице или, собрав, запрограммировать для иной обработки.

Так и поступим, введя новую функцию:

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

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

Это лишь одно из применений.

3 The Settings Messenger

Это для действующего класса Settings_Message. Но как к нему привязаться? Конечно можно указать прямо, но если есть промежуточный класс, мы имеем возможность контроля над тем, что возвращается к нам, не добавляя больше ответственности классу Settings_Message, так?

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

Первоначальные установки класса просты.

  • Конструктор создает экземпляр класса Settings_Message, который мы можем использовать для отправки и получения сообщений.
  • Он  связывает метод с нашим пользовательским tutsplus_settings_messages hook, который мы определили в предыдущем уроке.

Взгляните на первые пару методов:

Из ранних уроков этого курса вы помните про наш hook в настройкахsettings.php. Для полноты картины перечисленные здесь:

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

Добавление сообщений

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

Смотрите, где мы добавляем успешные сообщения, предупреждения или сообщения об ошибке:

Просто, не так ли?

Получение сообщений

Извлечение сообщений не сильно отличается, нам просто нужно предоставить тип сообщений, которые мы хотим получить:

Сказано - сделано, не так ли?

Но вы уловили суть?

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

Проверьте следующие частные методы, ответственные за добавления и извлечения сообщений прямо из Settings_Message требование применяется к объекту сообщения:

И это оборачивается в новый Settings_Messenger класс. Всё это не так сложно, правда?

Начинаем плагин

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

Смотрите всю функцию ниже:

И это оно.

Отметим несколько моментов:

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

Это все о переработке кода. Это не будет работать прямо из коробки, поскольку есть еще коды, которые требуется загрузить, PHP-файлы, необходимые для запуска плагина в работу; однако суть кода, приведённого выше, в его переработке, что и является темой этого курса.

Заключение

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

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

  • настраиваемые меню
  • представление страниц администрирования
  • различные типы сообщений
  • определение и использование пользовательских хуков
  • и переработку объектно-ориентированного кода

Как обычно, я всегда рад ответить на вопросы в комментариях, также вы можете проверить мой блог и зайти на мой Twitter. Всегда готов обсудить новости о софте в WordPress и всего, что с ним связано. Если вы заинтересованы в дальнейшем развитии темы WordPress, не забывайте проверить my previous series and tutorials и другие WordPress material на Envato Tuts+.

Ресурсы

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.