В работе с WordPress часто возникает задача удалить все записи, созданные определенным пользователем. Например, при удалении аккаунта автора или очистке контента. В этой статье мы разберем, как программно удалить все посты пользователя, используя стандартные функции WordPress и WP_Query.
Почему стоит удалять записи программно
Удаление записей через административную панель неудобно при большом количестве постов. Ручное удаление займет много времени и может привести к ошибкам. Программный подход позволяет автоматизировать процесс, избежать человеческого фактора и интегрировать удаление в процессы, например, при удалении пользователя.
Также с помощью кода можно контролировать, какие типы записей удалять — посты, страницы, кастомные типы. Это гибкий способ, который легко адаптировать под задачи.
Использование WP_Query для выборки постов автора
Для начала нам нужно получить все записи автора. Для этого удобно использовать класс WP_Query с параметром author. Вот пример функции, которая возвращает ID всех постов пользователя:
function wppuzzle_get_author_post_ids($author_id) {
$query = new WP_Query([
'author' => $author_id,
'posts_per_page' => -1,
'fields' => 'ids',
'post_status' => 'any',
]);
return $query->posts;
}Здесь мы получаем все записи независимо от статуса. Если нужно, можно фильтровать по статусу или типу записи.
Удаление записей по ID с помощью wp_delete_post
После получения ID постов их можно удалять с помощью функции wp_delete_post(). Важно учитывать параметр $force_delete, который определяет удаление из корзины или полное удаление.
function wppuzzle_delete_author_posts($author_id, $force_delete = false) {
$post_ids = wppuzzle_get_author_post_ids($author_id);
foreach ($post_ids as $post_id) {
wp_delete_post($post_id, $force_delete);
}
}Если $force_delete установлен в true, посты удаляются без перемещения в корзину, что полезно для полного очищения.
Практические рекомендации по безопасности
Удаление данных — критичная операция, поэтому важно учесть следующие моменты:
- Проверять права текущего пользователя на удаление записей, например, с помощью
current_user_can('delete_posts'). - Использовать nonce для защиты вызова функций из интерфейса.
- Обеспечить резервное копирование сайта перед массовым удалением.
Пример проверки прав и безопасности при вызове функции:
if (current_user_can('delete_posts') && check_admin_referer('wppuzzle_delete_author_posts_action')) {
wppuzzle_delete_author_posts($author_id, true);
}Удаление записей при удалении пользователя автоматически
Часто нужно удалять посты автоматически при удалении пользователя. Для этого можно подключиться к хуку delete_user:
add_action('delete_user', 'wppuzzle_delete_author_posts_on_user_delete');
function wppuzzle_delete_author_posts_on_user_delete($user_id) {
wppuzzle_delete_author_posts($user_id, true);
}Так при удалении пользователя все его записи будут удалены без остатка.
Использование плагинов для упрощения задачи
Если хочется готовое решение без кода, можно использовать плагины, например, Bulk Delete. Он позволяет удалять записи по разным фильтрам, в том числе по автору. Однако программный способ дает больше контроля и гибкости.
Для интеграции с WPShop можно использовать плагин Clearfy Pro, который оптимизирует работу сайта и помогает управлять контентом.
Выводы и советы
Удаление всех записей пользователя — частая задача в администрировании WordPress. Использование WP_Query и wp_delete_post позволяет сделать это эффективно и безопасно. Встраивание функций в хуки и проверка прав обеспечит корректную работу и защиту от ошибок.
Не забывайте делать резервные копии и тестировать код на тестовом сайте перед применением в продакшене. Такой подход сохранит данные и время.