В процессе разработки и отладки тем и плагинов для WordPress часто возникает необходимость отключать кэширование, чтобы изменения сразу отображались на сайте. В этой статье мы подробно разберем, как создать собственную настройку в админке WordPress для включения и отключения кэширования, а также примеры кода для реализации этой функции.
Почему важно иметь настройку для отключения кэша
Статический кэш, будь то кэш страниц, браузерный кэш или кэш объектного уровня, значительно ускоряет работу сайта. Но во время разработки изменения не всегда видны сразу, что усложняет отладку. С помощью простой настройки можно быстро переключать режимы кэширования без необходимости лезть в код или настройки серверов.
Такой подход полезен для разработчиков, тестировщиков и даже продвинутых администраторов, которые хотят контролировать процесс без потери производительности.
Кроме того, это поможет избежать ошибок, связанных с устаревшими кэшированными данными, и упростит демонстрацию изменений клиенту.
Основные способы кэширования в WordPress
Перед тем, как создавать настройку, важно понимать, какие типы кэширования могут быть у вас на сайте:
- Объектный кэш — кеширование результатов запросов к базе данных через WP_Object_Cache (например, Memcached, Redis).
- Кэш страниц — сохранение сгенерированного HTML для быстрой отдачи (плагины типа WP Super Cache, W3 Total Cache).
- Кэш браузера — инструкции для браузера по хранению ресурсов.
- Кэш HTTP-запросов — при использовании REST API и AJAX.
В нашей статье мы сосредоточимся на отключении объектного и страницного кэширования, поскольку они чаще всего влияют на работу сайта при разработке.
Создаем настройку в админке WordPress
Для начала добавим страницу с настройкой в меню «Настройки» WordPress, где можно будет включать или отключать кэш.
Вот пример кода, который добавляет новую страницу настроек с чекбоксом:
function wpacademy_register_cache_settings() {
add_options_page(
'Настройки кэша',
'Управление кэшем',
'manage_options',
'wpacademy-cache-settings',
'wpacademy_cache_settings_page'
);
}
add_action('admin_menu', 'wpacademy_register_cache_settings');
function wpacademy_cache_settings_page() {
if (!current_user_can('manage_options')) {
return;
}
// Обработка сохранения настроек
if (isset($_POST['wpacademy_cache_nonce']) && wp_verify_nonce($_POST['wpacademy_cache_nonce'], 'wpacademy_save_cache_settings')) {
$disable_cache = isset($_POST['disable_cache']) ? 1 : 0;
update_option('wpacademy_disable_cache', $disable_cache);
echo '<div class="updated"><p>Настройки сохранены.</p></div>';
}
$disable_cache = get_option('wpacademy_disable_cache', 0);
?>
<div class="wrap">
<h1>Настройки кэша</h1>
<form method="post" action="">
<?php wp_nonce_field('wpacademy_save_cache_settings', 'wpacademy_cache_nonce'); ?>
<table class="form-table">
<tr valign="top">
<th scope="row">Отключить кэш</th>
<td><input type="checkbox" name="disable_cache" value="1" <?php checked(1, $disable_cache); ?> /></td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}Этот код создаст меню «Управление кэшем» в разделе настроек, где можно будет поставить галочку для отключения кэша.
Отключение объектного кэша и кэша страниц
Теперь, когда у нас есть флаг в базе, нужно использовать его для отключения кэширования.
Отключение объектного кэша
Для отключения объектного кэша можно использовать фильтр enable_object_cache. Добавим следующий код в functions.php вашей темы или в плагин:
function wpacademy_disable_object_cache($enabled) {
if (get_option('wpacademy_disable_cache', 0)) {
return false; // Отключаем объектный кэш
}
return $enabled;
}
add_filter('enable_object_cache', 'wpacademy_disable_object_cache');Отключение кэширования страниц
Если у вас установлен плагин кэширования страниц, например WP Super Cache или W3 Total Cache, можно попытаться программно отключить кэширование, проверяя нашу опцию.
Для WP Super Cache можно добавить следующий код, который отключит вывод кеша:
function wpacademy_disable_page_cache() {
if (get_option('wpacademy_disable_cache', 0)) {
define('DONOTCACHEPAGE', true);
}
}
add_action('init', 'wpacademy_disable_page_cache', 1);Для W3 Total Cache такой способ работает аналогично, так как плагин уважает константу DONOTCACHEPAGE.
Пример интеграции с плагином Clearfy Pro
Плагин Clearfy Pro предлагает расширенные возможности по управлению кэшированием и оптимизацией. Можно интегрировать нашу настройку с Clearfy для более гибкого контроля.
Например, с помощью хука Clearfy можно автоматически отключать кэш в момент включения настройки:
function wpacademy_clearfy_integration() {
if (get_option('wpacademy_disable_cache', 0)) {
// Отключаем кэш Clearfy
if (function_exists('clearfy_disable_cache')) {
clearfy_disable_cache();
}
}
}
add_action('init', 'wpacademy_clearfy_integration');Для подробностей смотрите документацию плагина на сайте WPSHOP.ru.
Советы и рекомендации по работе с кэшем при разработке
Кроме создания собственной настройки, стоит учитывать следующие моменты:
- Периодически очищайте кэш плагинов через их собственный интерфейс.
- Используйте режимы разработчика, если плагин кэширования их поддерживает.
- Не отключайте кэш на продакшене без веских причин, это может сильно замедлить сайт.
- Если используете CDN, учитывайте кеширование на стороне CDN, его тоже нужно очищать или обходить во время разработки.
Создание пользовательской настройки для отключения кэша — простой и эффективный способ ускорить процесс разработки и избежать ошибок, связанных с устаревшими данными.