В процессе работы с WordPress иногда возникает необходимость автоматически удалять записи определённого статуса. Например, вы хотите, чтобы все записи со статусом «Черновик» удалялись через определённый период времени, чтобы не засорять базу данных и поддерживать структуру сайта в порядке.
Почему важно автоматизировать удаление записей по статусу
Ручное удаление старых или ненужных записей может занимать много времени, особенно если таких записей сотни или тысячи. Автоматизация этого процесса позволяет:
- Экономить время администратора сайта.
- Избегать накопления устаревшего или неактуального контента.
- Поддерживать производительность сайта и чистоту базы данных.
Рассмотрим, как реализовать автоматическое удаление записей с определённым статусом, используя встроенные возможности WordPress и минимальный PHP-код.
Создание функции для удаления записей по статусу
Для начала напишем функцию, которая будет искать записи с нужным статусом и удалять их:
function wpmarket_delete_posts_by_status($post_status = 'draft') {
$args = array(
'post_status' => $post_status,
'post_type' => 'post',
'posts_per_page' => -1,
'fields' => 'ids'
);
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true); // true для полного удаления
}
}
}В данном коде происходит запрос всех записей со статусом draft (черновик) и их полное удаление из базы. Если нужно удалить записи другого статуса, просто передайте его в аргумент функции.
Особенности функции
Используем wp_delete_post с параметром true, чтобы удалить запись без помещения ее в корзину. Это важно для автоматизации, чтобы место в базе освободилось сразу.
Параметр posts_per_page равен -1, чтобы получить все записи, а fields => 'ids' — для оптимизации запроса, возвращая только ID.
Добавление автоматического запуска с помощью WP-Cron
Чтобы функция выполнялась автоматически, можно использовать WP-Cron — встроенный планировщик задач в WordPress.
Добавим событие, которое будет запускаться ежедневно и вызывать нашу функцию удаления:
function wpmarket_schedule_delete_old_drafts() {
if (!wp_next_scheduled('wpmarket_daily_delete_drafts')) {
wp_schedule_event(time(), 'daily', 'wpmarket_daily_delete_drafts');
}
}
add_action('wp', 'wpmarket_schedule_delete_old_drafts');
add_action('wpmarket_daily_delete_drafts', function() {
wpmarket_delete_posts_by_status('draft');
});Здесь мы добавляем новую периодическую задачу, которая запускается раз в сутки и удаляет все записи со статусом «черновик».
Как изменить частоту или статус
Если хотите запускать задачу реже или чаще, можно изменить параметр 'daily' на 'hourly' или 'twicedaily'. Для этого также можно добавить свои интервалы в WP-Cron.
Для удаления записей с другим статусом достаточно изменить 'draft' на нужный статус, например, 'pending' или 'future'.
Пример расширения: удаление записей старше N дней с определённым статусом
Часто полезно удалять не все записи определённого статуса, а только те, которые старше определённого времени. Для этого изменим функцию:
function wpmarket_delete_old_posts_by_status($post_status = 'draft', $days_old = 30) {
$date_query = array(
array(
'column' => 'post_date',
'before' => "$days_old days ago",
),
);
$args = array(
'post_status' => $post_status,
'post_type' => 'post',
'posts_per_page' => -1,
'date_query' => $date_query,
'fields' => 'ids'
);
$query = new WP_Query($args);
if (!empty($query->posts)) {
foreach ($query->posts as $post_id) {
wp_delete_post($post_id, true);
}
}
}Теперь будет удаляться только черновики старше 30 дней. Можно изменить параметр $days_old для своей задачи.
Использование плагина Clearfy Pro для управления автоматическим удалением
Если не хочется писать код, можно использовать плагины для расширенного управления автоматизацией. Например, Clearfy Pro позволяет настроить очистку базы и удалять старые записи с определёнными параметрами.
Clearfy Pro даёт гибкий интерфейс, где можно задать не только статус, но и другие условия удаления, например, по категории, тегам и дате.
Тестирование и безопасность удаления записей
Перед внедрением автоматического удаления обязательно:
- Протестируйте функцию на тестовом сайте.
- Сделайте резервную копию базы данных.
- Убедитесь, что удаляются только нужные записи.
Автоматическое удаление — мощный инструмент, но требует аккуратности, чтобы не потерять важный контент.
Итоговые рекомендации
Автоматизация удаления записей по статусу помогает поддерживать чистоту сайта и оптимизировать базу данных. Используйте WP-Cron для периодического запуска, расширяйте функции с датами и статусами, а для удобства рассмотрите плагины типа Clearfy Pro.
Ниже итоговый пример подключения в файле functions.php или в плагине:
// Функция удаления старых черновиков
function wpmarket_delete_old_drafts() {
wpmarket_delete_old_posts_by_status('draft', 30);
}
// Запуск по расписанию
function wpmarket_schedule_delete_old_drafts() {
if (!wp_next_scheduled('wpmarket_daily_delete_old_drafts')) {
wp_schedule_event(time(), 'daily', 'wpmarket_daily_delete_old_drafts');
}
}
add_action('wp', 'wpmarket_schedule_delete_old_drafts');
add_action('wpmarket_daily_delete_old_drafts', 'wpmarket_delete_old_drafts');