Диагностика задачи: зачем и когда нужно автоматическое сообщение о новом отеле
Если вы ведёте сайт с каталогом отелей на WordPress и добавляете новые записи часто, полезно автоматически оповещать пользователей или администраторов о появлении нового объекта. Это может быть email-рассылка, сообщение в админ-панели, уведомление через REST API или публикация в соцсетях. Такой подход экономит время и снижает вероятность пропуска важных обновлений.
Создание кастомного типа записи «Отели» и добавление автоматического сообщения
Регистрируем тип записи отеля
Регистрация кастомного типа записей — основа. В functions.php вашей темы или в плагине добавьте:
function register_hotel_post_type() {
$labels = array(
'name' => 'Отели',
'singular_name' => 'Отель',
'menu_name' => 'Отели',
'add_new_item' => 'Добавить новый отель',
'edit_item' => 'Редактировать отель',
'new_item' => 'Новый отель',
'view_item' => 'Просмотреть отель',
'search_items' => 'Поиск отелей',
'not_found' => 'Отели не найдены',
'not_found_in_trash' => 'Отели не найдены в корзине',
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
'menu_position' => 20,
'menu_icon' => 'dashicons-building',
);
register_post_type('hotel', $args);
}
add_action('init', 'register_hotel_post_type');Добавляем автоматическую отправку email при публикации нового отеля
Используем хук transition_post_status, чтобы отследить смену статуса записи на «publish» именно для типа «hotel» и отправить уведомление.
function notify_new_hotel_post($new_status, $old_status, $post) {
if ('hotel' !== $post->post_type) {
return;
}
if ('publish' === $new_status && 'publish' !== $old_status) {
$to = 'admin@example.com'; // Замените на нужный email
$subject = 'Новый отель добавлен: ' . $post->post_title;
$message = 'Появился новый отель на сайте: ' . get_permalink($post->ID);
wp_mail($to, $subject, $message);
}
}
add_action('transition_post_status', 'notify_new_hotel_post', 10, 3);Пошаговое руководство по внедрению
- Добавьте код регистрации типа записи в functions.php и сохраните файл.
- Создайте новый отель в админке WordPress, заполните заголовок и описание.
- Опубликуйте запись и убедитесь, что email приходит на указанный адрес.
- При необходимости замените адрес получателя или расширьте функционал (например, отправку в Slack или Telegram).
Как проверить, что автоматическое сообщение работает
- Создайте тестовую запись типа «Отель» и опубликуйте её.
- Проверьте папку «Входящие» у email-адреса, указанного в коде.
- Если письма не пришли, проверьте логи сервера и настройки почты WordPress (можно использовать SMTP-плагины).
Частые ошибки и как их исправить
- Письма не отправляются: Проверьте функцию
wp_mail(), установите SMTP-плагин для надежной отправки. - Сообщение отправляется несколько раз: Убедитесь, что хук
transition_post_statusпроверяет смену статуса, а не просто публикацию. - Письма отправляются на неправильный адрес: Проверьте переменную
$toв коде и замените на актуальный email. - Новый тип записи не отображается в админке: Проверьте регистрацию типа записи, вызов хука
add_action('init', ...)и права пользователя.
Практические советы по безопасности и производительности
- Используйте фильтр для email-адреса, чтобы можно было менять получателя без правки кода:
function get_notification_email() {
return apply_filters('hotel_notification_email', 'admin@example.com');
}
// В функции отправки письма замените $to = get_notification_email();- Для больших сайтов рекомендуем использовать очередь для отправки писем (например, с WP Cron), чтобы не блокировать публикацию.
- Очищайте хук от лишних вызовов, чтобы избежать дублирования сообщений.
- Проверяйте права пользователя перед отправкой, чтобы избежать утечек информации.
Сравнение вариантов реализации автоматических сообщений
| Метод | Плюсы | Минусы | Применение |
|---|---|---|---|
| Хук transition_post_status + wp_mail | Просто, нативно, быстро | Зависит от настроек почты сервера | Маленькие и средние сайты |
| Отправка через SMTP-плагин | Надежная доставка, логирование | Требует настройки и установки плагина | Сайты с проблемами отправки почты |
| Интеграция с внешними сервисами (Slack, Telegram) | Удобно для команд, мгновенно | Нужна дополнительная настройка API и безопасность | Командные проекты, агентства |