Оптимизация базы данных WordPress — ключевой этап в поддержании скорости и стабильности сайта. Часто на сайтах остаются записи (посты), созданные пользователями, которые больше неактивны или удалены, но их контент остается в базе, занимая место и замедляя работу. В этой статье подробно разберем, как эффективно удалять неиспользуемые записи по конкретному автору, используя собственные функции и плагины.
Почему важно удалять записи по автору
Удаление записей по автору полезно в нескольких случаях:
- Пользователь удалён или отключён, а его посты больше не нужны.
- Неактивные авторы создавали тестовый или устаревший контент.
- Оптимизация базы данных для сокращения её размера и повышения скорости запросов.
Оставляя такие записи, вы рискуете получить перегруженную базу и замедленную работу сайта, особенно если публикаций много.
Удаление записей по автору через SQL-запрос
Самый прямой способ — выполнить SQL-запрос, который удалит все записи определённого автора. Но важно быть осторожным и сделать резервную копию базы данных перед выполнением.
DELETE FROM wp_posts WHERE post_author = ID_автора AND post_type = 'post';Где ID_автора — числовой ID пользователя в базе WP. Этот запрос удалит все записи типа post, принадлежащие автору.
Если нужно удалить записи разных типов (страницы, кастомные типы), добавьте условие или уберите фильтр по post_type.
Как сделать удаление записей по автору программно через функцию
Чтобы избежать прямого обращения к базе и повысить безопасность, рекомендуем использовать WordPress API. Ниже пример функции wpclean_delete_posts_by_author($author_id), которая удалит все публикации указанного автора.
function wpclean_delete_posts_by_author($author_id) {
if (!current_user_can('delete_posts')) {
return false; // Проверка прав
}
$args = [
'author' => $author_id,
'post_type' => 'post',
'posts_per_page' => -1,
'post_status' => 'any'
];
$posts = get_posts($args);
foreach ($posts as $post) {
wp_delete_post($post->ID, true); // true — удаление без перемещения в корзину
}
return true;
}Функцию можно вызвать из административной части или из плагина. Она учитывает права пользователя и корректно удаляет посты, вызывая все хуки WordPress.
Расширение функции: удаление кастомных типов записей
Если на вашем сайте используются кастомные типы постов, добавьте их в массив:
function wpclean_delete_posts_by_author_extended($author_id, $post_types = ['post', 'custom_type']) {
if (!current_user_can('delete_posts')) {
return false;
}
foreach ($post_types as $post_type) {
$args = [
'author' => $author_id,
'post_type' => $post_type,
'posts_per_page' => -1,
'post_status' => 'any'
];
$posts = get_posts($args);
foreach ($posts as $post) {
wp_delete_post($post->ID, true);
}
}
return true;
}Использование плагинов для удаления записей по автору
Если вы не хотите писать код, можно использовать плагины с расширенным фильтром:
- Bulk Delete — плагин позволяет массово удалять посты по различным условиям, включая автора. Устанавливается из репозитория WordPress, есть удобный интерфейс.
- WP Bulk Delete — похожий по функционалу, поддерживает удаление по автору, статусу, дате.
Пример настройки в Bulk Delete: выберите «Delete Posts», в фильтрах укажите автора, выберите типы постов и выполните удаление. Важно сделать бэкап!
Как избежать ошибок и потери данных
Перед массовым удалением обязательно сделайте резервную копию базы данных. Проверьте, что выбран правильный ID автора, чтобы не удалить важный контент.
Для безопасности в коде реализуйте проверки прав пользователя, чтобы не дать доступ случайным посетителям.
Если есть сомнения, сначала выполните удаление на тестовом сайте или локальной копии.
Дополнительные советы по оптимизации базы данных
После удаления записей рекомендуется выполнить оптимизацию таблиц базы данных. Это можно сделать SQL-командой:
OPTIMIZE TABLE wp_posts;Также полезно очистить связанные с удалёнными постами метаданные, комментарии и таксономии. Вот пример функции удаления метаданных удалённых постов:
function wpclean_delete_postmeta_by_post($post_id) {
global $wpdb;
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE post_id = %d", $post_id));
}Интегрируйте её с функцией удаления постов для полной очистки.
Заключение
Удаление неиспользуемых записей по автору — эффективный способ уменьшить размер базы данных и ускорить работу WordPress. Используйте безопасные методы через API или проверенные плагины, обязательно делайте резервные копии. Следите за связанной метаинформацией и оптимизируйте таблицы после удаления.
Для тех, кто хочет более продвинутых возможностей очистки и оптимизации, стоит обратить внимание на плагин Clearfy Pro, который автоматизирует многие задачи по оптимизации и очистке WordPress.