Создание WordPress-плагина для отправки SMS-сообщений
Привет, Habr! Меня зовут Анастасия Иванова, я технический писатель МТС Exolve. В этой статье я расскажу, как создать свой WordPress-плагин для отправки SMS-сообщений. Кроме сайта, вам потребуется Exolve SMS API.
Сразу скажу: мы считаем, что пользователя обязательно нужно спрашивать, согласен ли он получать SMS. Иначе можно заслуженно получить негативный фидбек и падение лояльности клиентов.
Итак, пользователи согласны получать ваши сообщения, рассылки готовы… Начнём! Все подробности — под катом!
SMS-плагин для WordPress помогает интегрировать SMS-сообщения в ваш сайт на WordPress. В нём много функций и возможностей для улучшения взаимодействия с пользователями и повышения эффективности коммуникации.
Вы можете настроить автоматическую отправку SMS-уведомлений о разных событиях на вашем сайте. Например, о новой регистрации пользователя, получении комментария или выполнении заказа. Это поможет вам и вашим пользователям быть в курсе актуальной информации.
Что нам понадобится
Создание WordPress-плагина
Если у вас нет WordPress, вы можете скачать его и установить на свой хостинг или локально с помощью дополнительного программного обеспечения. Например, я использовала сервис Local для установки WordPress на localhost моего компьютера. После установки я получила адрес своего нового локального сайта: http://sms-wordpress.local.
Установили и зашли? Супер! Теперь войдите в админ-панель своего WordPress-сайта. По умолчанию она расположена по адресу http://your-domain/wp-admin, где your-domain — адрес вашего сайта на хостинге или локально. В моём случае она находится по адресу http://sms-wordpress.local/wp-admin.
Теперь можно создавать плагин. В нашем случае это PHP-файл с комментарием в заголовке. Заголовок файла считывается при загрузке страницы, и все его функции внедряются в WordPress-приложение. В нашем плагине будет несколько PHP-файлов, их можно поместить в отдельную папку для удобства.
Перейдите в каталог вашего WordPress-сайта, откройте папку wp-content → plugins и создайте папку для файлов плагина, например sms-exolve.
Затем откройте новую папку и создайте в ней основной файл плагина с именем sms-exolve.php.
Далее нужно добавить комментарий к заголовку плагина. Откройте файл sms-exolve.php и добавьте следующий комментарий к заголовку:
Этот заголовок описывает плагин, который мы создаём, с указанием метаданных: название, автор и описание и так далее.
Теперь плагин должен быть доступен в WordPress. Откройте вкладку Plugins в левой панели. Вы должны увидеть новый плагин SMS. Нажмите на кнопку Activate и активируйте плагин:
Создание страницы настроек плагина
Создадим страницу настроек плагина, где мы будем хранить учётные данные для отправки SMS-сообщений (API-ключ и номер Exolve). Страница будет располагаться во вкладке Settings в панели администратора и выглядеть вот так:
Откройте файл sms-exolve.php. Создайте новый класс для нашего плагина под названием sms:
class Sms
{
public $pluginName = "sms";
}
Создайте файл с именем sms-settings-page.php. Этот файл отобразит HTML-код страницы настроек плагина. Откройте созданный файл и добавьте следующий код:
В коде выше мы использовали следующие WordPress-функции:
settings_fields — выводит поля формы на странице настроек
do_settings_sections — выводит все блоки опций, относящиеся к указанной странице настроек в панели администратора
submit_button — выводит кнопку submit с указанным текстом и классами
Далее нам нужно включить только что созданную страницу в основной файл. Это нужно, чтобы плагин мог отображать её при вызове. Добавьте в класс sms в файле sms-exolve.php функцию, которая будет отображать HTML-код страницы настроек:
/** Функция отображения страницы настроек */
public function displaySmsSettingsPage()
{
include_once "sms-settings-page.php";
}
Нам понадобится страница параметров для вызова функции displaySmsSettingsPage. Добавьте следующую функцию в класс sms, чтобы вызвать страницу параметров:
public function addSmsOption()
{
add_options_page(
"SMS EXOLVE PAGE", // $page_title
"SMS EXOLVE", // $menu_title
"manage_options", // $capability
$this->pluginName, // $menu_slug
[$this, "displaySmsSettingsPage"] // $function
);
}
В коде выше мы использовали WordPress-функцию add_options_page, которая добавляет дочернюю страницу (подменю) во вкладку Settings в панели администратора. Функция принимает пять параметров:
$page_title — текст для использования в теге title на странице настроек
$menu_title — текст для использования в качестве названия для пункта меню
$capability — название права доступа для пользователя, чтобы ему был показан этот пункт меню. Список возможных прав доступа вы можете найти в WordPress-документации Roles and Capabilities
$menu_slug — идентификатор меню, ссылка на страницу плагина
$function — название функции, которая отвечает за код страницы этого пункта меню
Создайте функцию smsSettingsSave (), которая будет регистрировать параметры и поля для хранения учётных данных (API-ключ и номер Exolve) в базе данных. Добавьте следующий код в класс sms в файле sms-exolve.php:
/** Поля для API-ключа и номера */
public function smsSettingsSave()
{
register_setting(
$this->pluginName,
$this->pluginName,
[$this, "pluginOptionsValidate"]
);
add_settings_section(
"sms_main",
"Настройки",
[$this, "smsSectionText"],
"sms-settings-page"
);
add_settings_field(
"exolve_number",
"Номер Exolve",
[$this, "smsSettingNumber"],
"sms-settings-page",
"sms_main"
);
add_settings_field(
"api_key",
"API-ключ",
[$this, "smsSettingKey"],
"sms-settings-page",
"sms_main"
);
}
/** Подзаголовок страницы настроек*/
public function smsSectionText()
{
echo 'Введите номер Exolve и API-ключ
';
}
/** Поле для номера Exolve*/
public function smsSettingNumber()
{
$options = get_option($this->pluginName);
echo "
";
}
/** Поле для API-ключа */
public function smsSettingKey()
{
$options = get_option($this->pluginName);
echo "
";
}
/** Очистить поля для ввода*/
public function pluginOptionsValidate($input)
{
$newinput["exolve_number"] = trim($input["exolve_number"]);
$newinput["api_key"] = trim($input["api_key"]);
return $newinput;
}
Метод smsSettingsSave включает в себя три WordPress-функции:
register_setting — регистрирует новую опцию и callback-функцию для обработки значения опции при её сохранении в базу данных
add_settings_section — создаёт новый блок (секцию), в котором выводятся поля настроек
add_settings_field — создаёт поле опции для указанного блока (секции)
Теперь подключим функции к WordPress. Откройте файл sms-exolve.php и добавьте следующий код после объявления класса sms:
/** Новый инстанс */
$smsInstance = new Sms();
/** Добавление страницы настроек в админ меню */
add_action("admin_menu", [$smsInstance , "addSmsOption"]);
/**Сохранение настроек */
add_action("admin_init", [$smsInstance , 'smsSettingsSave']);
В коде выше мы использовали WordPress-функцию add_action, которая позволяет прикрепить указанную PHP-функцию на указанный хук.
Теперь можно открыть страницу настроек плагина и сохранить учётные данные. Откройте вкладку Settings → SMS EXOLVE, введите номер телефона Exolve и API-ключ и нажмите на кнопку «Сохранить»:
Создание страницы отправки SMS-сообщения
Создадим страницу с формой для отправки SMS-сообщений. Страница расположена во вкладке Tools в панели администратора и выглядит вот так:
Создайте новый файл sms-sending-page.php. Добавьте к нему следующую HTML-разметку:
Теперь добавьте следующий код в класс sms в файле sms-exolve.php:
/** Отображение страницы отправки SMS-сообщения */
public function displaySendingSmsPage()
{
include_once "sms-sending-page.php";
}
/** Функция добавления страницы отправки SMS-сообщения */
public function addSendingSmsPage()
{
add_submenu_page(
"tools.php", // добавляем страницу в меню tools
__("SENDING SMS PAGE", $this->pluginName . "-sms"), // заголовок страницы
__("SENDING SMS", $this->pluginName . "-sms"), // заголовок в меню
"manage_options",
$this->pluginName . "-sms",
[$this, "displaySendingSmsPage"] // вызов функции отображения страницы
);
}
В коде выше мы использовали WordPress-функцию add_submenu_page, которая добавляет дочернюю страницу (подраздел) в указанную вкладку в панели администратора. Мы добавили страницу для отправки SMS-сообщений во вкладку Tools.
Функция displaySendingSmsPage добавляет HTML-форму из файла sms-sending-page.php в основной файл. Чтобы функция работала, её нужно подключить к WordPress-действию admin_menu. Для этого добавьте следующие строки в конце кода вне класса sms:
/** Добавление страницы отправки SMS-сообщения */
add_action("admin_menu", [$smsInstance , "addSendingSmsPage"]);
Перезагрузите панель администратора WordPress, откройте вкладку Tools → SENDING SMS и вы увидите только что созданную форму для отправки SMS-сообщений.
Отправка SMS-сообщений
Добавьте функцию отправки SMS-сообщения через Exolve API в класс sms в файле sms-exolve.php:
/** Функция отправки SMS-сообщения */
public function send_message()
{
// POST запрос из формы с номером получателя SMS и текстом сообщения
if (!isset($_POST["send_sms_message"])) {
return;
}
$to = (isset($_POST["number"])) ? $_POST["number"] : "";
$message = (isset($_POST["message"])) ? $_POST["message"] : "";
// получение номера Exolve и API-ключа из базы
$sms_settings = get_option($this->pluginName);
if (is_array($sms_settings) and count($sms_settings) != 0) {
$EXOLVE_NUMBER = $sms_settings["exolve_number"];
$EXOLVE_KEY = $sms_settings["api_key"];
}
// отправка HTTP POST запроса в Exolve API
$url = "https://api.exolve.ru/messaging/v1/SendSMS";
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$headers = array(
"Accept: application/json",
"Authorization: Bearer $EXOLVE_KEY",
"Content-Type: application/json",
);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
$data = <<
В коде выше мы используем WordPress-функцию get_option, чтобы получить из базы данных API-ключ и номер Exolve, которые мы задали на странице настроек плагина ранее.
После мы используем cURL, чтобы отправить HTTP POST-запрос в Exolve на отправку SMS-сообщения на номер получателя и текстом сообщения из формы.
Если в ответе от Exolve мы получаем message_id, значит, сообщение успешно отправлено, и мы показываем сообщение об успешной отправке. Если получаем error, выводим ошибку отправки.
Теперь добавьте функции для показа сообщений об успешной или неуспешной отправке SMS в sms-класс:
/** Дизайн админ уведомлений (успешная/неуспешная отправка) */
public static function adminNotice($message, $status = true) {
$class = ($status) ? "notice notice-success" : "notice notice-error";
$message = __( $message, "sample-text-domain" );
printf( '%2$s
', esc_attr( $class ), esc_html( $message ) );
}
/** Ошибка при отправке SMS-сообщения */
public static function DisplayError($message = "Ошибка отправки SMS-сообщения") {
add_action( 'admin_notices', function() use($message) {
self::adminNotice($message, false);
});
}
/** SMS-сообщения успешно отправлено*/
public static function DisplaySuccess($message = "SMS-сообщение успешно отправлено!") {
add_action( 'admin_notices', function() use($message) {
self::adminNotice($message, true);
});
}
Функция admin_notice выводит HTML с сообщением об ошибке или успешной отправке.
Функция DisplayError вызывает admin_notice для отображения сообщения об ошибке.
Функция DisplaySuccess вызывает admin_notice для отображения сообщения об успешной отправке.
Наконец, подключим функцию отправки SMS-сообщений к WordPress. Для этого добавьте следующие строки в конце кода вне класса sms:
/** Запуск функции отправки SMS-сообщения */
add_action( 'admin_init', [$smsInstance , "send_message"] );
Проверка
Перейдите во вкладку Tools → SENDING SMS, введите номер получателя и текст сообщения и нажмите на кнопку отправить. Если сообщение не было отправлено, вы увидите текст ошибки отправки:
Если сообщение успешно отправлено, вы увидите соответствующее сообщение:
Сообщение должно быть успешно доставлено на номер получателя:
Так мы создали свой WordPress-плагин для отправки SMS-сообщений через сервис Exolve SMS API. Полный код плагина вы можете найти на Github.