Как стать автором
Обновить
1224.09
МТС
Про жизнь и развитие в IT

Создание WordPress-плагина для отправки SMS-сообщений

Время на прочтение9 мин
Количество просмотров1.5K

Привет, 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 и добавьте следующий комментарий к заголовку:

<?php

/*
Plugin Name: SMS
Plugin URI: http://sms-wordpress.local/
Description: Плагин для отправки SMS сообщений с помощью Exolve
Version:  1.0.0
Author: Anastasia Ivanova
*/

Этот заголовок описывает плагин, который мы создаём, с указанием метаданных: название, автор и описание и так далее.

Теперь плагин должен быть доступен в WordPress. Откройте вкладку Plugins в левой панели. Вы должны увидеть новый плагин SMS. Нажмите на кнопку Activate и активируйте плагин:

Создание страницы настроек плагина

Создадим страницу настроек плагина, где мы будем хранить учётные данные для отправки SMS-сообщений (API-ключ и номер Exolve). Страница будет располагаться во вкладке Settings в панели администратора и выглядеть вот так:

Откройте файл sms-exolve.php. Создайте новый класс для нашего плагина под названием sms:

class Sms
{
    public $pluginName = "sms";
}

Создайте файл с именем sms-settings-page.php. Этот файл отобразит HTML-код страницы настроек плагина. Откройте созданный файл и добавьте следующий код:

<form method="POST" action='options.php'>
   <?php
        settings_fields($this->pluginName);
        do_settings_sections('sms-settings-page');
        submit_button("Сохранить");
   ?>
</form>

В коде выше мы использовали следующие 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 '<h2">Введите номер Exolve и API-ключ</h2>';
    }

    /** Поле для номера Exolve*/

    public function smsSettingNumber()
    {
        $options = get_option($this->pluginName);
        echo "
            <input
                id='$this->pluginName[exolve_number]'
                name='$this->pluginName[exolve_number]'
                size='40'
                type='text'
                value='{$options['exolve_number']}'
                placeholder='Введите номер Exolve'
            />
        ";
    }

    /** Поле для API-ключа */

    public function smsSettingKey()
    {
        $options = get_option($this->pluginName);
        echo "
            <input
                id='$this->pluginName[api_key]'
                name='$this->pluginName[api_key]'
                size='40'
                type='text'
                value='{$options['api_key']}'
                placeholder='Введите API-ключ приложения'
            />
        ";
    }

    /** Очистить поля для ввода*/

    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-разметку:

<h2> <?php esc_attr_e( 'Отправка SMS-сообщения через Exolve', 'WpAdminStyle' ); ?></h2>
<div class="wrap">
    <div class="metabox-holder columns-2">
        <div class="meta-box-sortables ui-sortable">
            <div class="postbox">
                <h2 class="hndle">
                    <span> <?php esc_attr_e( 'Отправка SMS', 'WpAdminStyle' ); ?></span>
                </h2>
                <div class="inside">
                    <form method="post" name="cleanup_options" action="">
                        <input type="text" name="number" class="regular-text" placeholder="7999XXXXXXX" required /><br><br>
                        <textarea name="message" cols="50" rows="7" placeholder="Сообщение"></textarea><br><br>
                        <input class="button-primary" type="submit" value="Отправить" name="send_sms_message" />
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

Теперь добавьте следующий код в класс 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 = <<<DATA
            {
                "number":"$EXOLVE_NUMBER",
                "destination":"$to",
                "text":"$message"
            }
            DATA;
           
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
           
            $resp = curl_exec($curl);
            curl_close($curl);
            $decoded_resp = json_decode($resp, true);

            if (array_key_exists("message_id", $decoded_resp)) {
                self::DisplaySuccess();
            } else {
                $error = $decoded_resp["error"]["message"];
                self::DisplayError("Ошибка отправки SMS-сообщения: $error");
            }
    }

В коде выше мы используем 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( '<div class="%1$s"><p>%2$s</p></div>', 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.

Теги:
Хабы:
Всего голосов 6: ↑6 и ↓0+6
Комментарии2

Публикации

Информация

Сайт
www.mts.ru
Дата регистрации
Дата основания
Численность
свыше 10 000 человек
Местоположение
Россия