Работа с кэшем и базой данных — одна из ключевых задач по поддержанию быстродействия сайта на WordPress. Часто для этого используют плагины, но в некоторых случаях полезно знать, как сделать это вручную. В этой статье мы разберём, как удалить кэш и оптимизировать базу данных WordPress без плагинов, используя собственные функции и SQL-запросы.
Почему стоит удалять кэш и оптимизировать базу данных вручную
Плагины для очистки кэша и оптимизации базы данных удобны, но они добавляют дополнительную нагрузку и зависимости, а иногда могут конфликтовать с другими инструментами. Ручное управление даёт более тонкий контроль, позволяет интегрировать очистку в кастомные сценарии и автоматизировать процессы через wp-cron.
Кроме того, это полезный навык для разработчиков, который помогает понять внутренние механизмы WordPress и базы данных MySQL.
Удаление кэша WordPress вручную
Виды кэша в WordPress
В WordPress часто используют несколько видов кэша:
- Объектный кэш (object cache) — хранит результаты запросов к базе данных и вычисленные данные в памяти;
- Кэш страниц (full page cache) — сохраняет готовые HTML-страницы для быстрого вывода;
- Кэш транзиентов (transients) — временные данные, хранящиеся в базе данных или в памяти.
Удаление объекта кэша и транзиентов
Для удаления объекта кэша можно использовать функцию wp_blog_delete_object_cache(), которую мы создадим для wp-blog.ru:
function wp_blog_delete_object_cache() {
if ( function_exists('wp_cache_flush') ) {
wp_cache_flush();
}
}
Эта функция вызовет сброс объекта кэша, если он активен. Рекомендуется запускать её через wp-cron или вручную в административной части.
Для удаления всех транзиентов из базы данных достаточно выполнить SQL-запрос, так как транзиенты хранятся в таблице wp_options с ключами, начинающимися на _transient_:
function wp_blog_delete_all_transients() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'");
}
Этот код удалит все транзиенты, что освободит место и предотвратит использование устаревших данных.
Очистка кэша страниц вручную
Если вы используете серверный кэш (например, Nginx FastCGI cache) или кэш на уровне PHP, то часто кэш хранится в файловой системе. Для его удаления можно написать функцию, удаляющую содержимое директории кэша:
function wp_blog_clear_page_cache($cache_dir) {
if (!is_dir($cache_dir)) return;
$files = glob($cache_dir . '/*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
} elseif (is_dir($file)) {
wp_blog_clear_page_cache($file); // рекурсивно
rmdir($file);
}
}
}
Замените $cache_dir на путь к вашей папке с кэшем. Вызов этой функции можно привязать к хуку сохранения записи или к кнопке в админке.
Оптимизация базы данных WordPress без плагинов
Почему важна оптимизация базы
Со временем в базе данных накапливаются ревизии постов, автосохранения, удалённые записи, спам-комментарии и прочие «мусорные» данные. Они замедляют запросы, увеличивают размер резервных копий и нагрузку на сервер.
Оптимизация заключается в удалении лишних данных и дефрагментации таблиц.
Удаление ревизий и автосохранений
Для удаления всех ревизий и автосохранений используйте следующий код:
function wp_blog_delete_revisions_and_autosaves() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'auto-draft'");
}
Эти запросы удалят все ревизии и автосохранения, которые занимают место, но обычно не нужны.
Удаление спам-комментариев и мусорных записей
Для очистки комментариев со статусом «спам» и «корзина» можно использовать:
function wp_blog_delete_spam_and_trash_comments() {
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'");
}
Это поможет уменьшить размер таблицы комментариев и ускорить выборки.
Оптимизация таблиц базы данных
После удаления большого количества записей полезно выполнить оптимизацию таблиц, чтобы освободить неиспользуемое пространство и уменьшить фрагментацию. Это можно сделать SQL-запросом:
function wp_blog_optimize_tables() {
global $wpdb;
$tables = $wpdb->get_col('SHOW TABLES');
foreach ($tables as $table) {
$wpdb->query("OPTIMIZE TABLE {$table}");
}
}
Оптимизация должна выполняться в моменты низкой нагрузки, так как временно блокирует таблицы.
Автоматизация удаления кэша и оптимизации базы через wp-cron
Чтобы поддерживать сайт в хорошем состоянии, полезно автоматизировать описанные процедуры. Ниже пример функции, которая запускает все основные очистки и оптимизацию:
function wp_blog_scheduled_cleanup() {
wp_blog_delete_object_cache();
wp_blog_delete_all_transients();
wp_blog_delete_revisions_and_autosaves();
wp_blog_delete_spam_and_trash_comments();
wp_blog_optimize_tables();
}
if (!wp_next_scheduled('wp_blog_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wp_blog_daily_cleanup');
}
add_action('wp_blog_daily_cleanup', 'wp_blog_scheduled_cleanup');
Этот код создаёт ежедневное событие, которое очищает кэш, удаляет мусор из базы и оптимизирует таблицы. Вы можете изменить периодичность и добавить очистку кэша страниц, если это актуально.
Заключение по практическому применению
Ручное удаление кэша и оптимизация базы данных — важный инструмент для опытных разработчиков и администраторов WordPress. Это позволяет гибко настраивать процесс, избегать избыточных плагинов и оптимизировать производительность сайта.
Если вам нужен готовый функционал для автоматизации или расширенные возможности по оптимизации, рекомендуем посмотреть на плагин Clearfy Pro, который включает в себя множество инструментов для очистки и оптимизации WordPress.