В процессе работы с WordPress накапливаются мета данные (custom fields), которые со временем могут стать неактуальными или неиспользуемыми. Это замедляет работу сайта и увеличивает размер базы данных. В этой статье разберём, как эффективно находить и удалять такие мета данные с помощью собственного PHP-кода без использования тяжёлых плагинов.
Что такое мета данные в WordPress и почему их нужно чистить
Мета данные — это дополнительные поля, которые хранят информацию о постах, страницах, пользователях и других объектах WordPress. Например, мета данные могут содержать настройки плагинов, пользовательские значения или временные данные.
Со временем в базе данных накапливаются устаревшие или неиспользуемые мета данные, особенно после удаления плагинов или тем, которые оставляют свои записи. Это приводит к разрастанию таблиц wp_postmeta и wp_usermeta, что негативно сказывается на производительности сайта.
Очистка неиспользуемых мета данных помогает уменьшить размер базы, сократить время запросов и ускорить загрузку страниц.
Как определить неиспользуемые мета данные в WordPress
Определить, какие мета данные не используются, непросто, поскольку WordPress не хранит метаданные в строго структурированном виде. Но можно использовать несколько подходов:
- Анализ требований плагинов и тем: если плагин удалён, а его мета данные остались, их можно считать неиспользуемыми.
- Проверка популярных ключей мета данных: часто встречающиеся ключи, которые не используются на сайте, можно удалить.
- Логирование использования мета данных: с помощью кода можно отслеживать, какие мета данные действительно читаются.
Для большинства сайтов безопасно удалять мета данные, связанные с удалёнными плагинами и темами.
Удаление неиспользуемых мета данных с помощью PHP-кода
Рассмотрим пример функции, которая удаляет все мета данные с заданным ключом. Её можно адаптировать под ваши нужды, вызывая для каждого неиспользуемого ключа.
function wp_code_remove_postmeta_by_key($meta_key) {
global $wpdb;
$meta_key_esc = esc_sql($meta_key);
$table = $wpdb->postmeta;
$sql = "DELETE FROM $table WHERE meta_key = '$meta_key_esc'";
$deleted = $wpdb->query($sql);
return $deleted !== false ? $deleted : 0;
}
// Пример использования:
$deleted_count = wp_code_remove_postmeta_by_key('_old_plugin_setting');
echo "Удалено мета данных с ключом _old_plugin_setting: $deleted_count";
Эта функция удаляет все записи из таблицы wp_postmeta с указанным ключом. Аналогично можно сделать для wp_usermeta, заменив таблицу.
Удаление нескольких ключей мета данных за раз
Если у вас есть список ключей для удаления, можно выполнить удаление в цикле:
$keys_to_delete = ['_old_plugin_setting', '_unused_custom_field', '_temp_data'];
foreach ($keys_to_delete as $key) {
$count = wp_code_remove_postmeta_by_key($key);
echo "Удалено $count записей с ключом $key<br>";
}
Автоматизация очистки мета данных: пример WP-CLI команды
Для удобства можно создать WP-CLI команду, чтобы запускать очистку из терминала. Ниже пример базовой реализации:
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wpcode clean-meta', function($args, $assoc_args) {
global $wpdb;
$keys = isset($assoc_args['keys']) ? explode(',', $assoc_args['keys']) : [];
if (empty($keys)) {
WP_CLI::error('Укажите ключи мета данных для удаления через параметр --keys');
}
foreach ($keys as $key) {
$key = trim($key);
$deleted = wp_code_remove_postmeta_by_key($key);
WP_CLI::log("Удалено $deleted записей с ключом $key");
}
});
}
Запуск из консоли будет выглядеть так:
wp wpcode clean-meta --keys=_old_plugin_setting,_temp_data
Дополнительные советы по работе с мета данными
Помимо удаления неиспользуемых мета данных, важно регулярно оптимизировать таблицы базы данных, чтобы уменьшить фрагментацию:
- Используйте запрос
OPTIMIZE TABLE wp_postmeta;для очистки и дефрагментации таблицы. - Рассмотрите возможность использования плагинов типа Clearfy Pro для автоматической оптимизации базы.
- Регулярно проводите аудит плагинов и тем, чтобы удалять ненужные.
Как безопасно тестировать удаление мета данных
Перед удалением на рабочем сайте рекомендуется делать резервные копии базы данных. Также можно сначала просмотреть количество записей с ключом, чтобы понять масштаб:
function wp_code_count_postmeta_by_key($meta_key) {
global $wpdb;
$meta_key_esc = esc_sql($meta_key);
$table = $wpdb->postmeta;
return (int) $wpdb->get_var("SELECT COUNT(*) FROM $table WHERE meta_key = '$meta_key_esc'");
}
$count = wp_code_count_postmeta_by_key('_old_plugin_setting');
echo "Найдено записей с ключом _old_plugin_setting: $count";
Если количество большое и вы уверены, что мета данные не используются, можно запускать удаление.
Заключение
Удаление неиспользуемых мета данных — важный шаг для поддержания производительности WordPress-сайта. С помощью приведённых функций и рекомендаций вы сможете регулярно очищать базу, снижая нагрузку и ускоряя работу сайта. Если хотите более продвинутые инструменты, обратите внимание на Clearfy Pro, который умеет автоматизировать многие задачи оптимизации.