В WordPress часто возникает задача управлять публикациями пользователей — удалять или изменять записи определённых авторов по программным причинам. Например, нужно удалить все публикации заблокированного автора или изменить атрибуцию постов при переносе сайта. В этой статье подробно разберём, как это сделать максимально эффективно и безопасно с помощью WP-CLI и PHP-кода.
Почему важно программно управлять публикациями авторов
Удаление или изменение постов вручную через админ-панель — не всегда удобно и быстро. Особенно если у автора сотни публикаций. Программные методы позволяют:
- Автоматизировать процесс удаления или переназначения постов
- Избежать ошибок при массовых операциях
- Вписать логику в кастомные скрипты для интеграции с другими процессами
К тому же программный подход эффективен при миграциях, бэкапах и очистке сайта от спама.
Удаление всех публикаций автора через WP-CLI
WP-CLI — мощный инструмент для командной строки, который позволяет управлять сайтом без загрузки админки. Для удаления всех постов автора с ID 123 выполните:
wp post delete $(wp post list --author=123 --post_type=post --format=ids) --force
Здесь мы сначала получаем ID всех постов автора, а затем удаляем их. Ключ --force удаляет без помещения в корзину.
Этот способ очень быстрый и надежный, но требует доступа к серверу через SSH.
Функция удаления публикаций автора в PHP для использования в теме или плагине
Если нужно интегрировать логику удаления в код сайта, используем следующий пример:
function wptests_delete_author_posts($author_id) {
$args = array(
'author' => $author_id,
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => -1
);
$posts = get_posts($args);
foreach ($posts as $post) {
wp_delete_post($post->ID, true); // true - удалить без корзины
}
}
// Пример вызова
wptests_delete_author_posts(123);
Функция получает все публикации автора и удаляет каждую. Такой подход пригодится для триггеров, например, при удалении пользователя.
Изменение автора публикаций программно
Иногда требуется не удалять, а переписать автора публикаций. Например, при слиянии учетных записей. Вот пример функции:
function wptests_change_author_posts($old_author_id, $new_author_id) {
$args = array(
'author' => $old_author_id,
'post_type' => 'post',
'post_status' => 'any',
'numberposts' => -1
);
$posts = get_posts($args);
foreach ($posts as $post) {
$post->post_author = $new_author_id;
wp_update_post($post);
}
}
// Использование
wptests_change_author_posts(123, 456);
Данная функция меняет автора у всех постов с одного пользователя на другого.
Обработка пользовательских типов записей и оптимизация
Если на сайте используются кастомные типы записей, их тоже можно обработать, добавив в аргументы post_type массив:
$args = array(
'author' => $author_id,
'post_type' => array('post', 'custom_type'),
'post_status' => 'any',
'numberposts' => -1
);
Для оптимизации на больших сайтах желательно использовать WP_Query с пагинацией или WP-CLI, чтобы избежать превышения лимитов памяти и времени выполнения.
Пример использования плагина Clearfy Pro для управления публикациями
Плагин Clearfy Pro позволяет настроить права пользователей и автоматизировать очистку от спам-публикаций, что косвенно помогает управлять авторскими материалами без кода. Особенно полезен для сайтов с большим количеством авторов.
Резюме и рекомендации
Программное управление публикациями авторов — важный инструмент для разработчиков и администраторов WordPress. Используйте WP-CLI для быстрого массового удаления, а PHP-функции — для интеграции логики в плагины и темы.
Не забывайте делать бэкапы перед массовыми операциями и тестировать скрипты на тестовом сайте. А если нужно расширенное управление и безопасность — обратите внимание на Clearfy Pro.