Функция wp_save_post_revision()
создаёт ревизию (версию) указанного поста в WordPress. Эта функция автоматически срабатывает при обновлении или публикации поста, создавая копию его текущего состояния. Ревизии позволяют восстановить предыдущее состояние поста, если это необходимо, что особенно полезно при внесении частых изменений в записи.
wp_save_post_revision( int $post_id ): int|WP_Error|void
Каждое обновление поста в WordPress создаёт ревизию. Самая последняя ревизия всегда содержит данные текущего поста. Ревизия представляет собой запись с типом revision
, статусом inherit
и с указанием родительского поста через поле post_parent
. Функция не только создаёт ревизии, но и следит за количеством хранимых версий, удаляя лишние ревизии, если их количество превышает лимит, установленный через константу WP_POST_REVISIONS
.
Параметры
- $post_id (int) (обязательный) — Идентификатор поста, для которого будет создана ревизия.
Возвращаемое значение
- int — ID созданной ревизии.
- WP_Error — В случае ошибки, возвращается объект с описанием ошибки.
- void — Если ревизия не должна быть создана (например, когда ревизии отключены или пост не поддерживает ревизии).
Особенности: Функция не создаёт ревизию, если:
- Ревизии отключены (в целом или для данного типа записей).
- Данные поста не изменились с момента последней ревизии.
- Тип поста не поддерживает ревизии.
- Публикация происходит в статусе авто-сохранения (autosave) или авто-черновика (auto-draft).
Как это работает
Функция работает на основе нескольких внутренних механизмов WordPress, таких как:
wp_revisions_enabled()
— проверяет, включены ли ревизии для записи.wp_get_post_revisions()
— получает список всех ревизий для поста.wp_revisions_to_keep()
— определяет, сколько ревизий можно хранить для записи.
Пример 1: Создание ревизии для записи
Этот пример показывает, как вручную создать ревизию для записи с ID 123:
// Создадим ревизию для поста с ID 123
wp_save_post_revision( 123 );
Этот код создаёт новую ревизию для поста с указанным идентификатором. Если запись обновлялась ранее, новая ревизия сохранит текущее состояние поста.
Пример 2: Контроль количества ревизий
Если требуется ограничить количество ревизий для поста до, например, 5 последних, можно использовать фильтр wp_revisions_to_keep
:
add_filter( 'wp_revisions_to_keep', function( $num, $post ) {
// Ограничим количество ревизий до 5 для всех постов
return 5;
}, 10, 2 );
Этот фильтр применяется для всех типов записей, задавая максимальное количество ревизий, которые можно сохранить.
Пример 3: Уведомление о создании новой ревизии
Можно использовать хук post_updated
для выполнения действий после создания ревизии. Например, вывести сообщение в консоль, когда создаётся новая ревизия:
add_action( 'post_updated', function( $post_id ) {
// Создадим ревизию и выведем сообщение в консоль браузера
$revision_id = wp_save_post_revision( $post_id );
if ( ! is_wp_error( $revision_id ) ) {
echo '<script>console.log("Новая ревизия создана: ID ' . $revision_id . '");</script>';
}
}, 10, 1 );
Этот код создаёт ревизию для обновляемого поста и выводит ID новой ревизии в консоль браузера. Это может быть полезно для отладки или отслеживания изменений.
Пример 4: Отключение ревизий для конкретного типа записей
Допустим, у вас есть кастомный тип записи product
, для которого вы не хотите сохранять ревизии. Можно отключить ревизии для этого типа через фильтр:
add_filter( 'wp_revisions_to_keep', function( $num, $post ) {
// Отключим ревизии для типа записи product
if ( 'product' === $post->post_type ) {
return 0;
}
return $num;
}, 10, 2 );
В этом примере ревизии отключаются для всех записей типа product
. Для других типов записей ревизии продолжат сохраняться.
Пример 5: Удаление старых ревизий
Можно удалить старые ревизии, оставив только последние, через фильтр wp_revisions_to_keep
. Например, сохраним только 3 последние ревизии:
add_filter( 'wp_revisions_to_keep', function( $num, $post ) {
// Сохраняем только 3 последние ревизии
return 3;
}, 10, 2 );
Этот код удаляет старые ревизии, сохраняя только последние три для каждой записи.
Заключение
Функция wp_save_post_revision()
— важный элемент системы управления контентом в WordPress. Она автоматически сохраняет изменения, делая возможным восстановление предыдущих версий записи. Функция гибко настраивается через фильтры и хуки, позволяя разработчикам контролировать количество сохраняемых ревизий, а также управлять ими на уровне конкретных типов записей или даже отдельных постов.