W3 total cache - программное обновление кэша

17 янв. 2011 г., 15:20:04
Просмотры: 40K
Голосов: 26

Я разрабатываю сайт в стиле Digg на WordPress.

После установки W3 Total Cache я заметил, что определенные элементы, такие как количество голосов (и ID проголосовавших) за публикацию, кэшируются, хотя этого не должно происходить (по крайней мере, после того как пользователь голосует за статью). Я предполагаю, что невозможно предотвратить кэширование определенных элементов на странице (или это возможно?), поэтому я подумал о программном запуске обновления кэша страницы.

Есть ли какие-либо предложения?

0
Все ответы на вопрос 6
3
21

Если вам нужно очистить кеш, вы можете сделать это: в плагине есть функции для этого:

<?php 

flush_pgcache()  //кеш страниц
flush_dbcache()  //кеш базы данных
flush_minify()  //кеш минификации
flush_all()     //весь кеш

?>

И вам просто нужно вызвать это следующим образом:

<?php 
 $w3_plugin_totalcache->flush_all();
?>

И это, по сути, ответ на вопрос в заголовке "как программно обновить кеш"

17 янв. 2011 г. 19:23:06
Комментарии

Можете, пожалуйста, явно указать, как вы создали экземпляр объекта $w3_plugin_totalcache?

adamdport adamdport
27 февр. 2014 г. 17:35:50

Частично полезно, как вы инициализировали эту переменную?

thephpdev thephpdev
23 янв. 2017 г. 14:29:53

создайте новый экземпляр класса и затем обратитесь к этому методу. https://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/CacheFlush.php. if(class_exists('CacheFlush') ){ $CacheFlush = new CacheFlush; $CacheFlush::flush_post(get_option('page_on_front')); }

RobBenz RobBenz
11 окт. 2022 г. 22:06:06
4
12

Для очистки кеша одной страницы по ID записи в w3tc v0.9.3 я обнаружил, что работает следующий код:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
21 мар. 2014 г. 00:08:59
Комментарии

Куда следует поместить этот код? Похоже, он выполняется при каждой загрузке страницы (для этого ID). Нет ли способа полностью отключить кеширование?

s_ha_dum s_ha_dum
21 мар. 2014 г. 00:31:44

@s_ha_dum Не могли бы вы уточнить, с каким хуком мы можем использовать этот код?

Prafulla Kumar Sahu Prafulla Kumar Sahu
17 нояб. 2016 г. 10:42:30

Дополнительные хуки не требуются, если событие, к которому привязывается ваш пользовательский код/плагин, выполняется после загрузки плагинов, что обычно и происходит. Все доступные функции находятся в файле w3-total-cache-api.php в директории плагина W3TC.

Walf Walf
1 авг. 2018 г. 05:29:19

Спасибо, это было полезно для меня сейчас в декабре 2018 года. Мне нужен был способ очистить кеш главной страницы, когда клиент посещал определенную страницу (страницу настроек для отображения доступности агента). Это очень полезно для конкретных страниц, но было бы здорово, если бы существовала функция, которая очищает ВЕСЬ кеш, как это делает "Purge All Caches"!

Jordan Carter Jordan Carter
1 дек. 2018 г. 23:47:22
2
11

Решение от Bainternet мне не подошло.

Я успешно использую этот альтернативный сниппет в плагине, загружаемом на действии admin_init:

// Очистить весь W3 Total Cache
if( class_exists('W3_Plugin_TotalCacheAdmin') )
{
    $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin');

    $plugin_totalcacheadmin->flush_all();

    echo __('<div class="updated"><p>Все кеши <strong>W3 Total Cache</strong> успешно очищены.</p></div>');
}

Надеюсь, это кому-то поможет.

19 сент. 2011 г. 19:02:40
Комментарии

Я могу подтвердить, что решение kevinlearynet работает с W3 Total Cache версии 0.9.2.4. После этого обновления оно перестало работать для моего плагина, но это решение отлично помогло. Спасибо! Пол.

User User
4 окт. 2011 г. 21:55:31

Я пытаюсь запустить это из командной строки. Могу я спросить, как вы загрузили класс W3_Plugin_TotalCacheAdmin? Я пробовал подключать wp-load.php, но безрезультатно.

adamdport adamdport
27 февр. 2014 г. 00:56:59
5
10

W3 Total Cache поддерживает фрагментарное кеширование. Из FAQ:

Как реализовать фрагментарное кеширование?

Отредактируйте свои шаблоны, используя следующий синтаксис, чтобы динамические элементы оставались таковыми:

Пример 1:
<!-- mfunc любой PHP-код --><!-- /mfunc -->

Пример 2:
<!-- mfunc -->любой PHP-код<!-- /mfunc -->

Пример 3:
<!--MFUNC           -->
                                      echo rand();
<!--/mfunc -->

Пример 4:
<!-- mclude путь/к/файлу.php --><!-- /mclude -->

Пример 5:
<!-- mclude -->путь/к/файлу.php<!-- /mclude -->
17 янв. 2011 г. 16:06:28
Комментарии

Спасибо, Rast. Но когда я использую любой из приведённых примеров, получаю ошибку Parse error: syntax error, unexpected '<'

user1567 user1567
17 янв. 2011 г. 16:34:55

@user1567 вероятно у вас несоответствие открывающих/закрывающих тегов <?php ?>. Я ещё не использовал их, поэтому не могу показать рабочий пример.

Rarst Rarst
17 янв. 2011 г. 16:57:59

Во-первых, я хотел бы загружать functions.php без кэширования. Следующий код в functions.php вызвал ошибку выше: <?php <!-- mclude -->require_once(functions2.php)<!-- /mclude --> ?> Что не так с этим кодом?

user1567 user1567
17 янв. 2011 г. 17:20:31

@user1567 согласно примерам это должно выглядеть примерно так ?><!-- mclude -->functions2.php<!-- /mclude --><?php (я думаю :)

Rarst Rarst
17 янв. 2011 г. 17:36:08

Не получается заставить работать фрагментарное кэширование. Моя проблема описана здесь: http://stackoverflow.com/questions/31125413/w3-total-cache-and-fragment-cache-not-able-get-it-to-work

JackTheKnife JackTheKnife
30 июн. 2015 г. 19:38:48
2

Ни один из вышеперечисленных способов не сработал в моем плагине. Однако этот вариант работает! Подтверждена работоспособность для версии 0.9.2.4 w3tc.

if (function_exists('w3tc_dbcache_flush')) { w3tc_dbcache_flush(); }

Я выполнил запрос:

$wpdb->get_results( "SELECT `sb_settings`.`f_fb_app_id`,`sb_settings`.`f_fb_secret` FROM `sb_settings`" );

и с удивлением обнаружил, что значения f_fb_secret и f_fb_app_id были одинаковыми каждый раз. Очевидно, w3tc кэшировал результат запроса. Поэтому я добавил очистку кэша базы данных на странице изменения таблицы sb_settings.

Если вам нужно очистить кэш страниц, просто используйте w3tc_pgcache_flush вместо этого.

10 апр. 2013 г. 01:36:08
Комментарии

Хотелось бы, чтобы тот, кто поставил минус, объяснил, почему он это сделал. Есть ли что-то неверное в моем ответе?

Elrinth Elrinth
12 апр. 2013 г. 11:19:36

Это сработало для меня: if (function_exists('w3tc_flush_all')) { w3tc_flush_all(); }

Другие функции можно найти в файле w3-total-cache-api.php

P.O.W. P.O.W.
9 дек. 2020 г. 17:24:17
0

Используйте этот сниппет, чтобы ваш PHP-код выполнялся независимо от того, включено кеширование или нет. Да, вам придётся написать/вызвать вашу функцию дважды.

<!-- mfunc echo 'кеширование ВКЛ'; --><?php echo 'кеширование ВЫКЛ'; ?><!-- /mfunc -->


(Я думаю) вот как это работает:

  • Условные выражения mfunc заменяют php-теги.
  • Если кеширование ВЫКЛЮЧЕНО, php-код внутри комментариев mfunc отображается в вашей разметке как HTML-комментарии. <!-- mfunc echo "привет?"; --> Учтите это в зависимости от того, насколько вы готовы показывать свой PHP-код людям (происходит только при отключённом кешировании).
11 февр. 2012 г. 03:03:08