Неактивные мета данные — это записи в таблицах wp_postmeta, wp_usermeta и других мета-таблицах WordPress, которые давно не используются или относятся к удалённым объектам. Они занимают место и замедляют запросы к базе данных, особенно на больших сайтах с тысячами записей.
Почему важно удалять неактивные мета данные в WordPress
При длительной работе сайта в базе накапливаются «мусорные» данные: мета для удалённых постов, устаревшие пользовательские мета, остатки от удалённых плагинов. Это увеличивает размер базы, замедляет резервное копирование, приводит к долгим запросам при выборке данных.
Регулярная чистка мета данных помогает:
- Уменьшить размер базы данных.
- Ускорить генерацию страниц и запросы к базе.
- Снизить нагрузку на сервер.
- Облегчить резервное копирование и миграции.
Особенно актуально для больших проектов и магазинов на WooCommerce.
Как найти неактивные мета данные в WordPress
Основная задача — определить, какие мета данные «висят в воздухе», то есть не связаны с существующими постами или пользователями.
1. Поиск мета данных для удалённых постов
В таблице wp_postmeta есть поле post_id, оно должно ссылаться на существующую запись в wp_posts. Если поста с таким ID нет, мета данные считаются неактивными.
SQL-запрос для поиска таких записей:
SELECT pm.* FROM wp_postmeta pm LEFT JOIN wp_posts p ON pm.post_id = p.ID WHERE p.ID IS NULL;2. Поиск мета данных для удалённых пользователей
Аналогично для wp_usermeta — проверяем, существуют ли пользователи с указанным user_id.
SELECT um.* FROM wp_usermeta um LEFT JOIN wp_users u ON um.user_id = u.ID WHERE u.ID IS NULL;3. Метаданные плагинов и тем
Некоторые плагины создают свои мета ключи. Если плагин удалён, мета остаются, занимая место. Для их удаления нужно знать префиксы мета ключей. Например, плагин Clearfy использует ключи с префиксом clearfy_.
Для поиска таких ключей:
SELECT * FROM wp_postmeta WHERE meta_key LIKE 'clearfy_%';Как удалить неактивные мета данные — пример кода
Ниже пример функции wpstart_delete_orphan_postmeta(), которая удаляет все мета данные из wp_postmeta, у которых нет связанного поста.
function wpstart_delete_orphan_postmeta() {
global $wpdb;
$query = "DELETE pm FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID WHERE p.ID IS NULL";
$deleted = $wpdb->query($query);
return $deleted;
}Для пользователей аналогично:
function wpstart_delete_orphan_usermeta() {
global $wpdb;
$query = "DELETE um FROM {$wpdb->usermeta} um LEFT JOIN {$wpdb->users} u ON um.user_id = u.ID WHERE u.ID IS NULL";
$deleted = $wpdb->query($query);
return $deleted;
}Вы можете вызвать эти функции, например, через админский action или WP-CLI для очистки.
Плагины для очистки неиспользуемых мета данных
Если хочется автоматизировать процесс и не писать код, есть несколько решений:
- Clearfy Pro — содержит модуль для очистки базы, в том числе удаление неиспользуемых мета данных. Подробнее на официальном сайте.
- WP-Optimize — популярный плагин для оптимизации базы, умеет очищать устаревшие мета записи.
- Advanced Database Cleaner — позволяет вручную или по расписанию удалять мусорные записи, включая мета данные.
Практические рекомендации по безопасной очистке базы
Перед удалением мета данных обязательно сделайте резервную копию базы! Ошибки в SQL-запросах могут привести к потере данных.
Проверяйте количество найденных записей с помощью SELECT-запросов, прежде чем выполнять DELETE.
Не удаляйте мета данные, если не уверены в их назначении — некоторые плагины или темы могут использовать нестандартные связи.
Рекомендуется тестировать очистку на копии сайта.
Автоматизация очистки неактивных мета данных
Чтобы регулярно поддерживать базу в чистоте, можно настроить WP-Cron задачу:
function wpstart_schedule_meta_cleanup() {
if ( ! wp_next_scheduled( 'wpstart_meta_cleanup_hook' ) ) {
wp_schedule_event( time(), 'weekly', 'wpstart_meta_cleanup_hook' );
}
}
add_action( 'wp', 'wpstart_schedule_meta_cleanup' );
add_action( 'wpstart_meta_cleanup_hook', 'wpstart_delete_orphan_postmeta' );
add_action( 'wpstart_meta_cleanup_hook', 'wpstart_delete_orphan_usermeta' );Это позволит автоматически удалять неактивные мета данные раз в неделю.