В стандартном функционале WordPress автосохранения и ревизии создаются для каждой записи, что помогает защитить контент от потери данных и хранить историю изменений. Однако со временем количество ревизий может значительно вырасти и замедлить работу сайта, особенно если их много у записей определённых пользователей. В этой статье мы разберём, как удалить автосохранения и ревизии с привязкой к авторам, чтобы оптимизировать базу данных и контролировать данные именно по конкретным пользователям.
Почему важно удалять ревизии и автосохранения по пользователям
В WordPress каждая ревизия и автосохранение — это отдельный пост с типом revision и autosave, которые хранятся в таблице wp_posts. Если на сайте много авторов, особенно с разным уровнем активности, то ревизии могут скапливаться у одних пользователей, занимая много места в базе и замедляя запросы. Например, редакторы могут активно редактировать много записей, создавая сотни ревизий, а администраторы — наоборот.
Удаление ревизий и автосохранений по конкретным пользователям позволяет:
- Уменьшить размер базы данных.
- Ускорить работу админ-панели и фронтенда.
- Сфокусироваться на нужных данных без риска потерять важные изменения других авторов.
Особенно это актуально для крупных сайтов с несколькими редакторами. Далее мы рассмотрим, как реализовать удаление ревизий и автосохранений именно по авторам.
Как определить ревизии и автосохранения по авторам
По умолчанию ревизии и автосохранения — это посты с полем post_type равным revision или autosave. Чтобы удалить их по авторам, нужно использовать поле post_author, которое хранит ID пользователя (автора записи).
Таким образом, запросы к базе будут выглядеть примерно так:
SELECT ID FROM wp_posts WHERE post_type IN ('revision', 'autosave') AND post_author = {user_id};После получения ID этих постов можно их удалить.
Однако в WordPress нет готовых функций для удаления ревизий по конкретному автору, поэтому нужно создать свою функцию, которая грамотно удалит все эти записи, учитывая важность сохранения целостности базы.
Пример функции для удаления автосохранений и ревизий по пользователю
Ниже пример функции wpelement_delete_revisions_by_user, которая принимает ID пользователя и удаляет все ревизии и автосохранения, принадлежащие этому пользователю.
function wpelement_delete_revisions_by_user($user_id) {
global $wpdb;
if (!is_numeric($user_id) || $user_id <= 0) {
return false;
}
// Получаем ID ревизий и автосохранений автора
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type IN ('revision', 'autosave') AND post_author = %d",
$user_id
));
if (empty($post_ids)) {
return 0; // Нет ревизий для удаления
}
// Удаляем метаданные этих постов
foreach ($post_ids as $post_id) {
$wpdb->delete($wpdb->postmeta, ['post_id' => $post_id]);
}
// Удаляем сами ревизии и автосохранения
$ids_str = implode(',', array_map('absint', $post_ids));
$deleted = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids_str)");
return $deleted;
}Функция проверяет валидность ID пользователя, затем собирает все ревизии и автосохранения этого пользователя и удаляет их. Используется прямое обращение к базе через $wpdb для максимальной скорости и контроля.
Для вызова:
$removed = wpelement_delete_revisions_by_user(12); // где 12 — ID пользователя
if ($removed) {
echo 'Удалено ревизий и автосохранений: ' . $removed;
} else {
echo 'Ревизий для данного пользователя не найдено.';
}Оптимизация базы и безопасность
После удаления ревизий рекомендуется выполнить оптимизацию таблиц базы данных для освобождения места и ускорения запросов. Для этого можно использовать плагин Clearfy Pro, который имеет встроенные инструменты оптимизации, или выполнить SQL-команду вручную:
OPTIMIZE TABLE wp_posts, wp_postmeta;Важно отметить, что массовое удаление данных должно выполняться с осторожностью и только при наличии резервных копий базы. Также не стоит удалять ревизии для пользователей с ролью администратора или редактора без понимания последствий.
Альтернативные плагины и инструменты
Если вы не хотите писать код, существуют плагины, которые позволяют управлять ревизиями и автосохранениями. Например:
- WP Revisions Control — позволяет ограничить количество ревизий для всех пользователей.
- Clearfy Pro — включает инструменты для массового удаления ревизий и оптимизации базы, а также другие функции по ускорению сайта. Подробнее на https://wpshop.ru/plugins/clearfy-pro/.
Однако такие плагины обычно не делают удаление по конкретным авторам, поэтому если нужна именно фильтрация по пользователям — лучше использовать пользовательский код, как приведён выше.
Заключение по теме удаления ревизий по пользователям
Удаление автосохранений и ревизий по конкретным пользователям — задача узкоспециализированная, но востребованная для оптимизации больших сайтов с множеством авторов. Мы рассмотрели, как определить такие записи и удалить их с помощью функции, а также познакомились с плагинами, которые могут помочь в управлении ревизиями.
Используйте приведённый код с осторожностью, всегда делайте резервные копии и тестируйте на тестовом сайте перед применением на боевом проекте.