Функция wp_delete_post_revision()
в WordPress предназначена для удаления ревизий постов. Она позволяет разработчикам управлять историей изменений постов, удаляя ненужные или устаревшие ревизии, что может помочь в оптимизации базы данных.
wp_delete_post_revision( int|WP_Post $revision ): WP_Post|false|null
Параметры
- $revision (обязательный): ID ревизии или объект ревизии, который нужно удалить.
Возвращаемое значение
- WP_Post: возвращается объект удаленной ревизии, если удаление прошло успешно.
- false: если произошла ошибка при удалении (например, запрос к базе данных не удался).
- null: если ревизия не найдена.
Как работает функция
- Функция сначала проверяет существование указанной ревизии с помощью
wp_get_post_revision()
. Если ревизия не найдена, функция сразу возвращает null. - Если ревизия найдена, её ID передается функции
wp_delete_post()
, которая отвечает за фактическое удаление поста. - При успешном удалении срабатывает хук
wp_delete_post_revision
, который позволяет разработчикам выполнять дополнительные действия после удаления ревизии.
Пример 1: Удаление конкретной ревизии
Для удаления ревизии с известным ID вы можете использовать следующий код:
$revision_id = 7; // ID ревизии, которую нужно удалить
$deleted_revision = wp_delete_post_revision( $revision_id );
if ( $deleted_revision ) {
// Ревизия успешно удалена
echo "Ревизия с ID {$revision_id} была удалена.";
} else {
// Ревизия не найдена
echo "Ревизия с ID {$revision_id} не найдена.";
}
Пример 2: Удаление всех ревизий определенного поста
Иногда может возникнуть необходимость удалить все ревизии для определенного поста. В этом случае вы можете выполнить SQL-запрос для получения всех ревизий и затем удалить их по одному:
global $wpdb;
$post_id = 5; // ID поста, для которого удаляются ревизии
// Получаем все ревизии поста
$revision_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_parent = %d AND post_type = 'revision'",
$post_id
));
foreach ( $revision_ids as $revision_id ) {
$deleted_revision = wp_delete_post_revision( $revision_id );
if ( $deleted_revision ) {
echo "Ревизия с ID {$revision_id} успешно удалена.<br>";
} else {
echo "Не удалось удалить ревизию с ID {$revision_id}.<br>";
}
}
Пример 3: Удаление ревизий старше определенного периода
Вы можете также написать функцию для удаления ревизий, которые старше определенного количества дней. Например, удалим ревизии, старше 30 дней:
function delete_old_revisions( $days = 30 ) {
global $wpdb;
$date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
// Получаем все ревизии, созданные до указанной даты
$revision_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'revision' AND post_date < %s",
$date_limit
));
foreach ( $revision_ids as $revision_id ) {
wp_delete_post_revision( $revision_id );
echo "Ревизия с ID {$revision_id} была удалена.<br>";
}
}
// Вызов функции для удаления ревизий старше 30 дней
delete_old_revisions( 30 );
Заключение
Функция wp_delete_post_revision()
является мощным инструментом для управления ревизиями постов в WordPress. Она позволяет эффективно очищать базу данных от устаревших записей и поддерживать порядок в содержимом сайта. Применяя приведенные примеры, вы можете адаптировать функциональность удаления ревизий под свои нужды и улучшить производительность вашего сайта.