В этой статье разберём, как с помощью хуков WordPress автоматизировать процесс удаления старейших данных, например, устаревших записей, комментариев или транзиентов. Такая практика помогает поддерживать базу данных в чистоте и улучшать производительность сайта. Особенно это актуально для сайтов с большим объёмом контента.
Что такое хуки в WordPress и зачем их использовать для удаления данных
Хуки — это точки привязки, которые дают возможность внедрять свою логику в процесс работы WordPress без изменения исходного кода. С помощью хуков можно запускать функции в нужный момент, например, при сохранении записи, очистке кэша или по расписанию.
Удаление старейших данных вручную — это рутинная задача, которую можно автоматизировать. Для этого чаще всего используются хуки с планировщиком задач WP-Cron. Они позволяют запускать функцию очистки регулярно, например, раз в день или неделю.
WPWeb рекомендует подход с использованием хука wpweb_cron_delete_old_data, который мы сами создадим и добавим в расписание. Это позволит гибко управлять процессом очистки.
Создание пользовательского хука для удаления старых записей
Рассмотрим пример создания кастомного хука для удаления записей старше 180 дней. Для этого нужно:
- Добавить событие в расписание WP-Cron.
- Создать функцию, которая будет удалять записи.
- Привязать функцию к событию.
Добавляем в файл functions.php или в плагин следующий код:
function wpweb_add_cron_schedule( $schedules ) {
if( !isset( $schedules['daily'] ) ) {
$schedules['daily'] = array(
'interval' => 86400, // 24 часа
'display' => __( 'Ежедневно' ),
);
}
return $schedules;
}
add_filter( 'cron_schedules', 'wpweb_add_cron_schedule' );
// Регистрация события при активации плагина или темы
function wpweb_schedule_cron_event() {
if ( ! wp_next_scheduled( 'wpweb_cron_delete_old_posts' ) ) {
wp_schedule_event( time(), 'daily', 'wpweb_cron_delete_old_posts' );
}
}
add_action( 'wp', 'wpweb_schedule_cron_event' );
// Функция удаления постов старше 180 дней
function wpweb_delete_old_posts() {
global $wpdb;
$days = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$posts = get_posts( array(
'date_query' => array(
array(
'before' => $date_threshold,
),
),
'post_type' => 'post',
'post_status' => 'publish',
'numberposts' => -1,
'fields' => 'ids',
) );
foreach ( $posts as $post_id ) {
wp_delete_post( $post_id, true ); // true - удалить навсегда
}
}
add_action( 'wpweb_cron_delete_old_posts', 'wpweb_delete_old_posts' );Эта конструкция добавляет в планировщик задачу, которая ежедневно будет запускать функцию удаления постов старше 180 дней.
Удаление устаревших комментариев с помощью хука
Аналогично можно очистить базу от старых комментариев. Например, удалим комментарии, которые были добавлены более 1 года назад и в статусе «спам» или «ожидают модерации».
Добавим функцию и привяжем её к тому же крону:
function wpweb_delete_old_comments() {
$args = array(
'status' => array('spam', 'hold'),
'date_query' => array(
array(
'before' => date('Y-m-d', strtotime('-1 year')),
),
),
'number' => 100,
'fields' => 'ids',
);
$comments = get_comments( $args );
foreach ( $comments as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
}
add_action( 'wpweb_cron_delete_old_posts', 'wpweb_delete_old_comments' );Теперь при срабатывании нашего хука будут удаляться и старые нежелательные комментарии.
Удаление устаревших транзиентов для оптимизации сайта
Транзиенты — это временные данные, которые кешируются в базе данных. Иногда они остаются в базе долгое время и занимают место.
Для их удаления можно использовать SQL-запрос, который удалит все транзиенты старше определенного времени. Этот процесс можно запускать через наш хук.
function wpweb_delete_old_transients() {
global $wpdb;
$time = time() - DAY_IN_SECONDS * 7; // транзиенты старше 7 дней
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%' AND option_id IN (
SELECT option_id FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d
)",
$time
)
);
}
add_action( 'wpweb_cron_delete_old_posts', 'wpweb_delete_old_transients' );Этот запрос удалит устаревшие транзиенты, тем самым уменьшив размер базы данных и ускорив работу сайта.
Рекомендации и предостережения при использовании хуков для удаления данных
При автоматическом удалении данных важно помнить о безопасности и резервном копировании. Перед внедрением таких функций обязательно сделайте резервную копию базы данных, чтобы можно было восстановить случайно удалённые данные.
Также убедитесь, что функция удаляет только действительно ненужные данные. Например, в коде выше удаляются только опубликованные записи старше 180 дней, но если у вас есть важные архивные материалы, возможно, стоит использовать другие критерии.
Для мониторинга работы крон-задач можно использовать плагины, например, WP Crontrol, который позволяет просматривать и управлять расписанием задач.
Полезные плагины для автоматизации и оптимизации удаления данных
Кроме собственного кода, можно использовать готовые решения:
- Clearfy Pro — плагин с множеством функций оптимизации, включая удаление ревизий, транзиентов, кэша.
- WPRemark — помогает управлять комментариями и спамом.
Эти инструменты помогут дополнительно упростить работу и обезопасить ваш сайт.
Итог: как на wpweb.ru использовать хуки для регулярной очистки базы данных
Использование кастомных хуков и WP-Cron — мощный способ автоматизировать очистку базы данных WordPress от устаревших записей, комментариев и транзиентов. Это поддерживает сайт в оптимальном состоянии, снижает нагрузку на базу и улучшает скорость загрузки страниц.
Приведённые в статье примеры кода легко адаптируются под ваши конкретные нужды. А интеграция с плагинами Clearfy Pro и WPRemark сделает процесс ещё удобнее и безопаснее.