С течением времени в базе данных WordPress накапливаются устаревшие или ненужные мета данные, которые замедляют работу сайта и занимают лишнее место. В этой статье разберём, как автоматизировать процесс удаления старых мета данных (post meta, user meta и term meta) с помощью кастомных решений и популярных плагинов, а также рассмотрим примеры кода для безопасного удаления.
Почему важно удалять старые мета данные в WordPress
Мета данные в WordPress — это служебная информация, связанная с постами, пользователями и таксономиями. Например, это могут быть настройки плагинов, данные кэширования, дополнительные параметры контента и прочее. При длительной работе сайта многие мета данные перестают быть актуальными, но не удаляются автоматически.
Накопление устаревших мета данных приводит к:
- Увеличению размера базы данных
- Замедлению запросов к базе и, как следствие, скорости загрузки страниц
- Усложнению резервного копирования и восстановления
Регулярная очистка мета данных помогает поддерживать базу в оптимальном состоянии, особенно на больших и активно развивающихся сайтах.
Как определить, какие мета данные можно удалять
Перед удалением крайне важно не ошибиться и не удалить нужные данные. Рекомендуется:
- Провести аудит базы данных — определить, какие ключи мета данных не используются или относятся к удалённым плагинам/темам.
- Проверить дату создания или последнего обновления мета данных, если она хранится, и удалить старые записи.
- Сделать полный бэкап базы данных перед любыми операциями.
Для анализа можно использовать плагины, такие как Clearfy Pro, который помогает выявить и оптимизировать неиспользуемые данные.
Автоматическое удаление пост мета с помощью WPZoom функции
Рассмотрим пример автоматического удаления пост мета, которые старше определённого времени и содержат определённый префикс в ключе. Например, плагин оставляет мета с ключами, начинающимися на _wpzoom_cache_, которые мы хотим удалять через 30 дней после создания.
function wpzoom_remove_old_post_meta() {
global $wpdb;
$days = 30; // количество дней
$prefix = '_wpzoom_cache_';
$cutoff = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID постов, где есть старые мета
$post_ids = $wpdb->get_col($wpdb->prepare(
"SELECT post_id FROM {$wpdb->postmeta} pm
WHERE pm.meta_key LIKE %s
AND pm.meta_id IN (
SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_key LIKE %s
)",
$prefix . '%', $prefix . '%'
));
if (empty($post_ids)) {
return;
}
foreach ($post_ids as $post_id) {
$meta_values = get_post_meta($post_id);
foreach ($meta_values as $key => $values) {
if (strpos($key, $prefix) === 0) {
// Здесь можно добавить проверку даты, если мета хранит дату
delete_post_meta($post_id, $key);
}
}
}
}
// Добавляем задачу в wp_cron на ежедневное выполнение
add_action('wp_loaded', function() {
if (!wp_next_scheduled('wpzoom_daily_remove_old_meta')) {
wp_schedule_event(time(), 'daily', 'wpzoom_daily_remove_old_meta');
}
});
add_action('wpzoom_daily_remove_old_meta', 'wpzoom_remove_old_post_meta');Этот код планирует ежедневное выполнение функции очистки мета с заданным префиксом. Для более точного удаления можно расширить логику проверки даты.
Удаление user meta и term meta: примеры и особенности
User meta и term meta хранят дополнительные данные для пользователей и таксономий. Их очистка происходит по аналогии, но с использованием специальных функций и таблиц.
Пример удаления user meta с префиксом
function wpzoom_remove_old_user_meta() {
global $wpdb;
$prefix = '_wpzoom_user_cache_';
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key LIKE %s",
$prefix . '%'
));
foreach ($user_ids as $user_id) {
$meta_keys = $wpdb->get_col($wpdb->prepare(
"SELECT meta_key FROM {$wpdb->usermeta} WHERE user_id = %d AND meta_key LIKE %s",
$user_id, $prefix . '%'
));
foreach ($meta_keys as $key) {
delete_user_meta($user_id, $key);
}
}
}
add_action('wpzoom_daily_remove_old_user_meta', 'wpzoom_remove_old_user_meta');
// Запуск через cron аналогично post meta
Особенности удаления term meta
Для term meta нужно использовать функции delete_term_meta($term_id, $meta_key). Логика поиска и удаления схожа, но таблица для term meta другая. Важно убедиться, что удаляемые мета не критичны для таксономий.
Использование плагинов для автоматизации очистки мета данных
Если кодовые решения вам неудобны, обратите внимание на плагины, которые помогут автоматизировать очистку:
- Clearfy Pro — включает функции очистки базы, удаления устаревших мета данных и оптимизации.
- Advanced Database Cleaner — позволяет удалять устаревшие мета данные, ревизии, спам и прочее с настройкой расписания.
- WP-Optimize — комплексный плагин с очисткой мета данных и оптимизацией базы.
При использовании плагинов рекомендуется внимательно читать документацию и делать резервные копии.
Практические рекомендации и безопасность
При автоматизации удаления мета данных всегда придерживайтесь следующих правил:
- Создавайте резервные копии базы перед началом.
- Проводите тестирование на копии сайта.
- Используйте префиксы мета данных для безопасной фильтрации.
- Не удаляйте мета, если не уверены в их назначении.
- Используйте WP Cron или системные задачи для регулярного запуска очистки.
Следуя этим рекомендациям, вы сможете поддерживать базу данных WordPress в чистоте, улучшая производительность сайта и снижая риски ошибок.