WP REST API: уведомления при изменении статуса поста

В WordPress с помощью REST API можно не только получать и изменять данные, но и организовывать уведомления при различных событиях, например, при смене статуса записи (поста). Такая функциональность полезна при интеграции с внешними сервисами, системами аналитики, задачами автоматизации и уведомлениями для редакторов.

Почему важно отслеживать смену статуса поста через WP REST API

Смена статуса у поста — это ключевое событие для контент-менеджмента. Например, публикация, черновик, ожидание проверки или удаление — каждое из этих действий может запускать цепочку бизнес-процессов. Через WP REST API можно организовать централизованное получение таких уведомлений и автоматическую реакцию на них.

Стандартный WP REST API не предоставляет готового механизма событийных уведомлений, поэтому приходится создавать кастомные решения, используя хуки WordPress и собственные эндпоинты.

Как реализовать уведомления при смене статуса поста — подход с хуками

Первый и самый простой способ — использовать стандартный хук WordPress transition_post_status. При срабатывании этого хука можно запускать отправку уведомлений во внешние сервисы, например, через HTTP-запрос, Webhook или записывать событие в лог.

Ниже пример функции, которая срабатывает при смене статуса поста и отправляет POST-запрос на внешний API:

function wpapi_transition_post_status_notify( $new_status, $old_status, $post ) {
    if ( $new_status === 'publish' && $old_status !== 'publish' && $post->post_type === 'post' ) {
        $payload = array(
            'post_id' => $post->ID,
            'post_title' => $post->post_title,
            'new_status' => $new_status,
            'old_status' => $old_status,
            'changed_at' => current_time( 'mysql' ),
        );

        wp_remote_post( 'https://external-service.ru/api/notify', array(
            'body' => json_encode( $payload ),
            'headers' => array( 'Content-Type' => 'application/json' ),
            'timeout' => 5,
        ) );
    }
}
add_action( 'transition_post_status', 'wpapi_transition_post_status_notify', 10, 3 );

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

Создание кастомного REST API эндпоинта для получения уведомлений о смене статуса

Если нужно, чтобы внешние клиенты могли получить список изменений статусов постов, можно создать отдельный REST API эндпоинт, который будет выдавать эти данные.

Вариант с записью смен статусов в отдельную таблицу или опцию, и выдачей их через REST API:

function wpapi_register_status_change_endpoint() {
    register_rest_route( 'wpapi/v1', '/status-changes', array(
        'methods' => 'GET',
        'callback' => 'wpapi_get_status_changes',
        'permission_callback' => function () {
            return current_user_can( 'edit_posts' );
        },
    ) );
}
add_action( 'rest_api_init', 'wpapi_register_status_change_endpoint' );

function wpapi_get_status_changes( WP_REST_Request $request ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_status_changes';

    $results = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY changed_at DESC LIMIT 20", ARRAY_A );

    return rest_ensure_response( $results );
}

function wpapi_record_post_status_change( $new_status, $old_status, $post ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'post_status_changes';

    $wpdb->insert(
        $table_name,
        array(
            'post_id' => $post->ID,
            'old_status' => $old_status,
            'new_status' => $new_status,
            'changed_at' => current_time( 'mysql' ),
        ),
        array('%d', '%s', '%s', '%s')
    );
}
add_action( 'transition_post_status', 'wpapi_record_post_status_change', 10, 3 );

Для такого варианта потребуется создать таблицу wp_post_status_changes в базе данных, что делается при активации плагина или темы.

Пример SQL для создания таблицы истории смен статусов

CREATE TABLE wp_post_status_changes (
  id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  post_id BIGINT(20) UNSIGNED NOT NULL,
  old_status VARCHAR(20) NOT NULL,
  new_status VARCHAR(20) NOT NULL,
  changed_at DATETIME NOT NULL,
  PRIMARY KEY (id),
  KEY post_id (post_id),
  KEY changed_at (changed_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

Использование плагинов для организации уведомлений о смене статуса

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

  • Better Notifications for WP — позволяет настраивать email-уведомления при любых событиях, включая смену статусов.
  • WP Webhooks — позволяет создавать Webhook-события для различных действий, включая обновление постов, что можно использовать для интеграций через REST API.
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpapi.ru&utm_medium=article&utm_campaign=wp-rest-api-post-status-change-notifications) — облегчает управление уведомлениями и интеграциями с внешними сервисами.

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

Обработка уведомлений на клиенте: примеры использования

Внешние системы, получая уведомления о смене статуса, могут автоматически обновлять интерфейс, запускать задачи или уведомлять редакторов. Например, популярно использовать JavaScript или Node.js для реакции на Webhook:

const express = require('express');
const app = express();
app.use(express.json());

app.post('/webhook', (req, res) => {
    const data = req.body;
    console.log('Received post status change:', data);
    // Здесь логика обработки: обновить БД, отправить уведомление, запустить задачу
    res.sendStatus(200);
});

app.listen(3000, () => console.log('Webhook listener running on port 3000'));

Такой подход позволяет строить гибкие автоматизации на базе WordPress.

Выводы и рекомендации

Отслеживание смены статуса постов через WP REST API — востребованная задача для интеграций и автоматизации. С помощью хуков WordPress можно быстро реализовать отправку уведомлений во внешние системы. Для более сложных сценариев стоит создавать собственные REST API эндпоинты и хранить историю изменений.

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

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

Шаблоны для WP Плагины для WP