В современных интернет-магазинах на WordPress оперативное информирование менеджеров или клиентов о новых заказах имеет большое значение. В этой статье мы подробно разберём, как настроить автоматическое создание и отправку push-уведомлений при создании нового заказа в WordPress, используя примеры кода и популярные плагины.
Что такое push-уведомления и зачем они нужны для заказов WordPress
Push-уведомления — это сообщения, которые мгновенно доставляются пользователю или администратору прямо на устройство (браузер, смартфон, рабочий стол). В контексте интернет-магазина они позволяют:
- Мгновенно оповестить менеджера о новом заказе для быстрого реагирования.
- Уведомить клиента о статусе заказа или подтверждении.
- Повысить уровень сервиса и ускорить обработку заказов.
Для WordPress и WooCommerce это особенно актуально, так как стандартные уведомления приходят по email и могут быть пропущены.
Как выбрать способ реализации push-уведомлений
Существует несколько подходов к реализации push-уведомлений в WordPress:
- Через специализированные плагины, например, WPRemark. Они упрощают настройку и отправку уведомлений.
- Использование сервисов пушей (OneSignal, Firebase Cloud Messaging) с их API и интеграцией через плагины.
- Самописное решение с использованием PHP и JavaScript, если нужна тонкая кастомизация.
В этой статье мы рассмотрим пример на базе WooCommerce и стандартного API WordPress, чтобы создать собственное уведомление и отправить его через браузер.
Подключение и настройка события создания заказа в WooCommerce
WooCommerce генерирует событие woocommerce_new_order, которое срабатывает при создании нового заказа. Мы можем повесить на него свой обработчик.
Пример подключения обработчика в functions.php вашей темы или в собственном плагине:
add_action('woocommerce_new_order', 'wporder_send_push_notification_new_order', 10, 1);
function wporder_send_push_notification_new_order($order_id) {
$order = wc_get_order($order_id);
if (!$order) return;
$order_total = $order->get_total();
$order_url = admin_url('post.php?post=' . $order_id . '&action=edit');
$message = "Новый заказ #" . $order_id . " на сумму " . wc_price($order_total);
// Здесь вызываем функцию отправки push
wporder_send_push($message, $order_url);
}Этот код формирует сообщение для уведомления и передаёт его в функцию отправки пуша.
Пример функции отправки push-уведомления через Web Push API
Чтобы отправлять push-уведомления, нужно взаимодействовать с сервисом push либо использовать браузерные технологии. Ниже упрощённый пример отправки пуша через собственный сервис на базе Firebase Cloud Messaging (FCM).
Для начала создайте проект в Firebase, получите серверный ключ и настройте подписку пользователей на пуши в браузере (этот шаг требует JavaScript на фронтенде). Здесь мы рассмотрим только серверную часть отправки.
function wporder_send_push($message, $url) {
$firebase_server_key = 'ВАШ_FIREBASE_SERVER_KEY';
$device_tokens = wporder_get_subscribed_device_tokens(); // Функция, возвращающая массив токенов подписчиков
if (empty($device_tokens)) return;
$payload = array(
'registration_ids' => $device_tokens,
'notification' => array(
'title' => 'Новый заказ в магазине',
'body' => $message,
'click_action' => $url,
'icon' => 'https://ваш-сайт.ru/wp-content/uploads/2024/icon.png'
)
);
$headers = array(
'Authorization: key=' . $firebase_server_key,
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
$result = curl_exec($ch);
curl_close($ch);
// Логирование результата или обработка ошибок
// error_log('Push sent result: ' . $result);
}Важный момент — wporder_get_subscribed_device_tokens() должна вернуть массив токенов устройств, которые подписались на уведомления. Для этого нужно реализовать фронтенд подписку с сохранением токенов в базу.
Пример подписки пользователей на push-уведомления в браузере
Чтобы пользователи могли получать уведомления, на стороне клиента должен быть код, который попросит разрешение и зарегистрирует сервис-воркер для пушей.
Пример на JavaScript, который можно добавить в ваш шаблон:
if ('serviceWorker' in navigator && 'PushManager' in window) {
navigator.serviceWorker.register('/service-worker.js')
.then(function(reg) {
return reg.pushManager.getSubscription()
.then(function(sub) {
if (sub === null) {
return reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array('ВАШ_ПУБЛИЧНЫЙ_VAPID_КЛЮЧ')
});
} else {
return sub;
}
});
}).then(function(subscription) {
// Отправить subscription.endpoint и ключи на сервер для сохранения
fetch('/wp-json/wporder/v1/save-subscription', {
method: 'POST',
body: JSON.stringify(subscription),
headers: {
'Content-Type': 'application/json'
}
});
});
}Этот код регистрирует сервис-воркер и подписывает пользователя на пуши, после чего отправляет данные на сервер.
Использование готовых плагинов для упрощения задачи
Если вы не хотите реализовывать весь стек самостоятельно, можно использовать плагины:
- WPRemark – плагин с возможностью отправки push-уведомлений и автоматизации уведомлений при заказах.
- OneSignal – бесплатный и популярный сервис с плагином для WordPress, который легко интегрируется и поддерживает широкие возможности уведомлений.
Использование готовых решений сокращает время внедрения, но может ограничить кастомизацию. Если нужна гибкость – лучше писать свои обработчики.
Итоги и рекомендации по безопасности
Автоматизация push-уведомлений при создании заказов повышает оперативность работы и улучшает коммуникацию с клиентами и менеджерами. Важно:
- Обеспечить безопасность хранения токенов и данных подписчиков.
- Следить за корректной работой сервис-воркеров и подписок.
- Обрабатывать ошибки при отправке уведомлений и логировать их.
- Тестировать уведомления на разных устройствах и браузерах.
Таким образом, используя описанные методы и примеры, вы сможете внедрить эффективную систему пуш-уведомлений на сайте WordPress с WooCommerce и повысить качество работы с заказами.