В администрировании WordPress часто возникает задача выборочного удаления записей из определённой категории на основе конкретных атрибутов — например, даты публикации, мета-полей или пользовательских условий. В этой статье мы подробно разберём, как программно удалять записи из категории WordPress по заданному атрибуту с помощью кода и рассмотрим полезные плагины для автоматизации процесса.
Почему важно удалять записи по атрибутам
Удаление записей выборочно помогает поддерживать актуальность контента, освобождать место в базе данных и улучшать производительность сайта. Например, вы можете захотеть удалить все записи из категории «Новости» старше двух лет или записи с определённым мета-значением, которое больше не актуально.
Ручное удаление занимает много времени и сопряжено с риском ошибок, особенно если записей много. Автоматизация через код или специализированные плагины упрощает этот процесс и снижает риски.
Удаление записей из категории по дате публикации: пример кода
Рассмотрим пример функции, которая удаляет все записи из категории с указанным слагом, опубликованные до определённой даты. Функция будет использовать WP_Query для выборки и wp_delete_post для удаления.
function wpcourse_delete_posts_by_category_and_date($category_slug, $date_before) {
$args = [
'category_name' => $category_slug,
'date_query' => [
[
'before' => $date_before,
'inclusive' => true,
],
],
'posts_per_page' => -1,
'post_type' => 'post',
'fields' => 'ids',
];
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true); // true — удаление без перехода в корзину
}
return count($query->posts);
}
return 0;
}
Использование:
$deleted_count = wpcourse_delete_posts_by_category_and_date('novosti', '2022-01-01');
echo "Удалено записей: " . $deleted_count;
Этот код безопасно удалит все записи категории «novosti», опубликованные до 1 января 2022 года.
Удаление записей по мета-полю в категории
Если нужно удалить записи с определённым пользовательским полем (мета-полем) в категории, можно расширить запрос WP_Query с параметром meta_query.
function wpcourse_delete_posts_by_category_and_meta($category_slug, $meta_key, $meta_value) {
$args = [
'category_name' => $category_slug,
'meta_query' => [
[
'key' => $meta_key,
'value' => $meta_value,
'compare' => '=',
],
],
'posts_per_page' => -1,
'post_type' => 'post',
'fields' => 'ids',
];
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
return count($query->posts);
}
return 0;
}
Пример вызова:
$deleted_count = wpcourse_delete_posts_by_category_and_meta('aktsii', 'promo_active', '0');
echo "Удалено записей с неактивным промо: " . $deleted_count;
Таким образом, удаляются все записи из категории «aktsii», где мета-поле promo_active равно 0.
Использование плагинов для массового удаления
Для тех, кто предпочитает графический интерфейс, подойдут плагины, которые позволяют удалять записи массово по фильтрам. Вот несколько полезных:
- Bulk Delete — плагин с широкими возможностями фильтрации и удаления записей по категориям, мета-полям, датам и другим атрибутам. Поддерживает автоматизацию через cron.
- WP Bulk Delete — похожий по функционалу, с удобным интерфейсом и возможностью удалять записи по типам, таксономиям и пользовательским полям.
Оба плагина доступны на официальном репозитории WordPress и легко интегрируются в любой сайт.
Рекомендации по безопасности и производительности
При массовом удалении записей важно учитывать нагрузку на сервер и возможные ошибки. Вот несколько советов:
- Перед удалением сделайте резервную копию базы данных.
- Для больших объёмов записей используйте пакетную обработку — удаляйте записи порциями, чтобы избежать таймаутов.
- Если используете код, выполняйте его в административной панели или через WP-CLI для удобства и безопасности.
- Проверяйте, что удаляете именно нужные записи, выводя их ID или заголовки перед удалением.
Пример пакетного удаления с ограничением по количеству
function wpcourse_delete_posts_batch($category_slug, $meta_key, $meta_value, $batch_size = 50) {
$args = [
'category_name' => $category_slug,
'meta_query' => [
[
'key' => $meta_key,
'value' => $meta_value,
'compare' => '=',
],
],
'posts_per_page' => $batch_size,
'post_type' => 'post',
'fields' => 'ids',
];
$query = new WP_Query($args);
if (empty($query->posts)) {
return 0;
}
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
return count($query->posts);
}
Вызывайте эту функцию в цикле, пока она возвращает больше 0, чтобы удалить все записи порциями.
Заключение
Удаление записей из категории WordPress по атрибутам — задача, требующая аккуратности и точности. Используя приведённые примеры кода, вы сможете автоматизировать процесс и избежать ошибок ручного удаления. Для удобства и безопасности рекомендуем сначала тестировать код на локальном или тестовом сайте.
Если вы хотите упростить задачу, обратите внимание на плагин Bulk Delete на wpshop.ru — он отлично подходит для массового удаления записей с гибкими фильтрами.