W3 общий кеш - обновление кеша программно [закрыто]

21

Я создаю Digg как веб-сайт в WordPress.

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

Какие-либо предложения?

user1567
источник

Ответы:

21

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

<?php 

flush_pgcache()  //page cache
flush_dbcache()  // database cache
flush_minify()  // minify cache
flush_all() //all caches

?>

и вам просто нужно назвать это так:

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

и это в основном ответ на вопрос в заголовке «Обновление кэша программно»

Bainternet
источник
12
Можете ли вы явно определить, как вы создали экземпляр объекта $ w3_plugin_totalcache?
adamdport
3
Частично полезно, как вы создали эту переменную?
thephpdev
10

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

How do I implement fragment caching? 

Edit your templates to with the following syntax to ensure that dynamic features remain so:

Example 1:
<!-- mfunc any PHP code --><!-- /mfunc -->

Example 2:
<!-- mfunc -->any PHP code<!-- /mfunc -->

Example 3:
<!--MFUNC           -->
                                      echo rand();
<!--/mfunc -->

Example 4:
<!-- mclude path/to/file.php --><!-- /mclude -->

Example 5:
<!-- mclude -->path/to/file.php<!-- /mclude -->
Rarst
источник
Спасибо Раст. Но когда я использую любой из приведенных выше примеров, я получаю ошибку Parse error: синтаксическая ошибка, неожиданная '<'
user1567
@ user1567 вы, вероятно, не соответствует открывающим / закрывающим <?php ?>тегам. Я еще не использовал их, поэтому не имею практического фрагмента, чтобы показать.
первое
Во-первых, я хотел бы загрузить functions.php без его кеширования. Следующий код в functions.php вызвал вышеуказанную ошибку: <? Php <! - mclude -> require_once (functions2.php) <! - / mclude ->?> Что не так с кодом?
user1567
1
@ user1567 в соответствии с примерами это должно быть что-то вроде ?><!-- mclude -->functions2.php<!-- /mclude --><?php(я думаю :)
Rarst
Не удается приступить к работе с фрагментным кэшированием. Моя проблема описана здесь: stackoverflow.com/questions/31125413/…
JackTheKnife
10

Чтобы очистить одну страницу по идентификатору записи в w3tc v0.9.3, я обнаружил, что это работает:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
user806052
источник
1
Где бы вы разместили этот код? Похоже, что он работает при каждой загрузке страницы (для этого идентификатора). Нет ли способа помешать кешированию полностью?
s_ha_dum
@s_ha_dum Не могли бы вы узнать, с каким хуком мы можем использовать этот код?
Прафулла Кумар Саху
Дополнительные хуки не нужны, если событие, к которому присоединяется ваш пользовательский код / ​​плагин, выполняется после загрузки плагинов, как это обычно бывает. Все доступные функции находятся в w3-total-cache-api.phpдиректории плагинов W3TC.
Уолф
Спасибо, это было полезно для меня сейчас, в декабре 2018 года. Мне нужен был способ очистить кэш домашней страницы, когда клиент посетил определенную страницу (страницу настроек, которая отображается, когда агент доступен). Это очень полезно для определенных страниц, но было бы неплохо, если бы была функция, которая удаляла ВСЕ кеши, как это делает Purge All Caches!
Джордан Картер
9

Решение Bainternet, похоже, не работает для меня.

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

// Clear all 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>All <strong>W3 Total Cache</strong> caches successfully emptied.</p></div>');
}

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

Кевин Лири
источник
Я могу подтвердить, что решение kevinlearynet работает с W3 Total Cache версии 0.9.2.4. Он сломался для моего плагина после этого обновления, и это работает удовольствие. Спасибо! Павел.
2
Я пытаюсь запустить это из командной строки. Могу я спросить, как вы загрузили класс W3_Plugin_TotalCacheAdmin? Я пытался требовать wp-load.php безрезультатно.
adamdport
5

Ничто из вышеперечисленного не работает для меня в моем плагине. Однако это сработало! Подтвердил работу для версии 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_secretFROM sb_settings»);» и был удивлен, что значения f_fb_secret и f_fb_app_id каждый раз были одинаковыми. Очевидно, w3tc кешировал результат запроса. Поэтому я добавил сброс dbcache на мою страницу модификации для таблицы sb_settings.

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

Elrinth
источник
Я хотел бы, чтобы downvoter сказал, почему он проголосовал. Что-то не так в моем ответе?
Элринт,
0

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

<!-- mfunc echo 'caching ON'; --><?php echo 'caching OFF'; ?><!-- /mfunc -->


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

  • Условные обозначения mfunc заменяют теги php.
  • Если кэширование OFF , PHP в комментариях mfunc появляются в разметке в качестве HTML - комментариев. <!-- mfunc echo "hello?"; -->Помните об этом, в зависимости от того, насколько вы счастливы, когда люди видят ваш PHP (происходит только при отключенном кэшировании).
Dominic
источник