Автоматическое удаление нерабочих записей WordPress по условию успешности

В процессе ведения сайта на WordPress часто возникает необходимость удалять записи, которые не приносят результатов: это могут быть устаревшие статьи, черновики, или записи с низкой активностью. В этой статье мы рассмотрим, как автоматизировать удаление таких нерабочих записей, используя встроенные возможности WordPress и WP-Cron. Такой подход позволит поддерживать базу данных в чистоте и повысить производительность сайта.

Что считать нерабочей записью: ключевые критерии для удаления

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

  • Записи со статусом draft или pending, которые не были опубликованы в течение длительного времени.
  • Записи с низким числом просмотров, например, меньше 10 за последние 30 дней.
  • Посты без комментариев и с низкой социальной активностью.
  • Записи с определённой мета-информацией, например, меткой неактуально.

Для примера возьмём условие удаления черновиков старше 30 дней и постов с менее чем 10 просмотрами за последний месяц.

Сбор данных о просмотрах: подключение счётчика просмотров к записям

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

Рассмотрим пример функции для увеличения счётчика просмотров в мета-поле wpteam_post_views:

function wpteam_increment_post_views($post_id) {
    $count = (int) get_post_meta($post_id, 'wpteam_post_views', true);
    $count++;
    update_post_meta($post_id, 'wpteam_post_views', $count);
}

Для вызова этой функции при просмотре записи добавим хук в single.php или файл темы functions.php:

if (is_singular('post')) {
    global $post;
    wpteam_increment_post_views($post->ID);
}

Такой подход позволит нам хранить и использовать данные просмотров для дальнейшей фильтрации.

Создание функции для автоматического удаления нерабочих записей

Теперь создадим функцию, которая будет находить и удалять неактивные записи по заданным критериям. Используем WP_Query для выборки черновиков старше 30 дней и постов с низким числом просмотров:

function wpteam_auto_delete_inactive_posts() {
    // Удаление черновиков старше 30 дней
    $args_drafts = [
        'post_type'      => 'post',
        'post_status'    => 'draft',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '30 days ago',
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];
    $drafts = get_posts($args_drafts);
    foreach ($drafts as $draft_id) {
        wp_delete_post($draft_id, true);
    }

    // Удаление постов с просмотрами меньше 10
    $args_low_views = [
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'meta_query'     => [
            [
                'key'     => 'wpteam_post_views',
                'value'   => 10,
                'compare' => '<',
                'type'    => 'NUMERIC',
            ],
        ],
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '30 days ago',
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];
    $low_views_posts = get_posts($args_low_views);
    foreach ($low_views_posts as $post_id) {
        wp_delete_post($post_id, true);
    }
}

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

Автоматизация через WP-Cron: настройка регулярного удаления

Чтобы функция запускалась автоматически, зарегистрируем событие в планировщике WP-Cron. Добавим код для создания и удаления задачи:

// Регистрируем событие при активации темы или плагина
function wpteam_activate_cron() {
    if (!wp_next_scheduled('wpteam_daily_delete_inactive_posts')) {
        wp_schedule_event(time(), 'daily', 'wpteam_daily_delete_inactive_posts');
    }
}
register_activation_hook(__FILE__, 'wpteam_activate_cron');

// Удаляем событие при деактивации
function wpteam_deactivate_cron() {
    $timestamp = wp_next_scheduled('wpteam_daily_delete_inactive_posts');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpteam_daily_delete_inactive_posts');
    }
}
register_deactivation_hook(__FILE__, 'wpteam_deactivate_cron');

// Привязываем нашу функцию к событию
add_action('wpteam_daily_delete_inactive_posts', 'wpteam_auto_delete_inactive_posts');

Теперь функция wpteam_auto_delete_inactive_posts будет запускаться раз в сутки и очищать сайт от нерабочих записей.

Дополнительные рекомендации и улучшения

Для более гибкого управления можно добавить в админку настройки, где пользователь сможет указать условия удаления: возраст записей, минимальное число просмотров и т.д. Это можно сделать с помощью Clearfy Pro или собственного интерфейса настроек.

Также рекомендуется вести лог удалённых записей для возможности восстановления или анализа. Для этого можно использовать пользовательские таблицы или системные логи PHP.

Если счётчик просмотров не подходит, можно учитывать другие метрики: количество комментариев, оценки, или использовать внешние аналитические сервисы.

Итог

Автоматическое удаление нерабочих записей позволяет поддерживать сайт в актуальном состоянии и снижать нагрузку на базу данных. Используя WP-Cron, пользовательские функции и мета-поля, вы можете настроить гибкую систему очистки, которая будет работать без постоянного вмешательства.

Как добавить динамические метаданные в WordPress по условию
31.03.2026
Как автоматизировать управление публикациями в WordPress с помощью WP-Cron и кода
11.04.2026
Автоматический импорт данных из Яндекс.Таблиц в WordPress
15.03.2026
WooCommerce: как удалить варианты товаров на основе атрибутов
26.04.2026
Как создать собственный виджет в WordPress: подробное руководство с примерами кода
01.12.2025

Возникли задачи по WP? Вы можете задать свой вопрос на FAQwp.com Либо обратиться к специалистам поддержки.