Удаление всех записей определенного автора в WordPress: код и плагины

В процессе администрирования сайта на WordPress может возникнуть необходимость удалить все записи, созданные конкретным пользователем (автором). Это может понадобиться при удалении пользователя, очистке контента или реструктуризации сайта. В этой статье подробно разберем, как это сделать безопасно и эффективно с помощью кода и плагинов.

Почему важно удалять записи автора правильно

При удалении пользователя WordPress предлагает опцию либо удалить все его записи, либо переназначить их другому пользователю. Однако иногда нужно именно массово удалить записи, сохранив самого пользователя, или удалить записи без удаления пользователя. Важно делать это корректно, чтобы не оставить «битых» ссылок, не нарушить структуру сайта и не потерять важные данные.

Неправильное удаление записей может привести к ошибкам, например, если записи связаны с другими объектами, комментариями или используются в меню.

Удаление записей автора с помощью PHP-кода

Функция wporgru_delete_author_posts для удаления записей по ID автора

Предлагаю написать функцию, которая удалит все записи определенного автора по его ID. Для безопасности рекомендуется запускать её вручную, например, через wp-cli или временно подключить в functions.php.

function wporgru_delete_author_posts($author_id) {
    if (!current_user_can('delete_posts')) {
        return 'Нет прав для удаления записей';
    }

    $args = [
        'author' => $author_id,
        'post_type' => 'post',
        'posts_per_page' => -1,
        'post_status' => 'any'
    ];

    $query = new WP_Query($args);

    if (!$query->have_posts()) {
        return 'Записей автора не найдено';
    }

    foreach ($query->posts as $post) {
        wp_delete_post($post->ID, true); // true — без перемещения в корзину
    }

    return 'Все записи автора удалены';
}

// Пример вызова
// echo wporgru_delete_author_posts(123); // где 123 — ID автора

Эта функция использует WP_Query для выборки всех записей автора и удаляет их безвозвратно. Вы можете расширить её, чтобы удалять записи других типов (страницы, кастомные типы) или учитывать статус публикации.

Удаление записей автора через WP-CLI

Если у вас есть доступ к консоли и установлен WP-CLI, задача упрощается. Команда:

wp post delete $(wp post list --author=123 --format=ids) --force

Удалит все записи автора с ID 123 без помещения их в корзину. Это самый быстрый способ массового удаления, но требует доступа к серверу.

Плагины для массового удаления записей по автору

Bulk Delete

Плагин Bulk Delete позволяет массово удалять записи по различным параметрам, в том числе по автору. В панели плагина можно выбрать автора и удалить все его записи с учётом статусов и типов.

Плюсы: удобный интерфейс, гибкие настройки. Минусы: требует ручного запуска, нет автоматизации.

WP Bulk Delete

Ещё один популярный плагин для массового удаления контента. Он позволяет фильтровать записи по авторам, датам, статусам и другим параметрам. Поддерживает запланированное удаление и удаление по расписанию.

Оба плагина совместимы с последними версиями WordPress и хорошо документированы.

Безопасность и резервное копирование

Перед массовым удалением важно сделать резервную копию базы данных и файлов сайта. Это позволит восстановить данные в случае ошибки. Особенно это критично при использовании кода с функцией wp_delete_post с параметром true, который сразу удаляет записи без корзины.

Также убедитесь, что выполняете удаление под пользователем с достаточными правами и понимаете последствия.

Дополнительные советы при удалении записей автора

  • Если записи связаны с меню или виджетами, проверьте и обновите их.
  • Если записи имеют комментарии, решите, что с ними делать — удалить или сохранить.
  • Для кастомных типов записей укажите post_type в WP_Query.
  • После удаления выполните оптимизацию базы данных для освобождения места.

Пример расширенной функции удаления с поддержкой кастомных типов

function wporgru_delete_author_all_posts($author_id, $post_types = ['post', 'page']) {
    if (!current_user_can('delete_posts')) {
        return 'Нет прав для удаления записей';
    }

    foreach ($post_types as $type) {
        $args = [
            'author' => $author_id,
            'post_type' => $type,
            'posts_per_page' => -1,
            'post_status' => 'any'
        ];

        $query = new WP_Query($args);
        if ($query->have_posts()) {
            foreach ($query->posts as $post) {
                wp_delete_post($post->ID, true);
            }
        }
        wp_reset_postdata();
    }

    return 'Все записи автора удалены';
}

// Использование
// echo wporgru_delete_author_all_posts(123, ['post', 'custom_type']);

Эта функция удобна, если на сайте есть несколько типов записей, которые нужно удалить у автора.

Таким образом, удаление всех записей автора в WordPress можно реализовать разными способами — от простого кода до использования мощных плагинов. Выбирайте подходящий метод исходя из задач и уровня доступа на сайте.

Скачать WP с оф. сайта Магазин проверенных платных тем