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


21

Я будую веб-сайт Digg у WordPress.

Встановивши W3 Total Cache, я помітив певні елементи, такі як кількість голосів (і ідентифікатори виборців) на одну посаду, навіть якщо їх не повинно бути (принаймні, не після того, як користувач голосує за статтю). Я припускаю, що неможливо запобігти кешування певних елементів на сторінці (чи це?), Тому я подумав запустити кеш-сторінки програми оновлення кешу сторінки.

Будь-які пропозиції?

Відповіді:


21

якщо ви хочете очистити кеш, ви можете зробити це: плагін має функції для цього

<?php 

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

?>

і вам просто потрібно назвати це так:

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

і це в основному відповідь на питання в заголовку "кеш програмно оновити кеш"


12
Чи можете ви чітко визначити, як ви створили об'єкт $ w3_plugin_totalcache?
admdport

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 -->

Спасибі Раст. Але коли я використовую будь-який із наведених вище прикладів, я отримую помилку Синтаксична помилка: помилка синтаксису, несподівана '<'
user1567

@ user1567 у вас, ймовірно, невідповідність <?php ?>тегам відкриття / закриття . Я ще не використовував їх, тому не маю практичного фрагменту для показу.
Рарст

По-перше, я хотів би завантажити функцію.php, не кешуючи її. Наступний код у function.php викликав помилку вище: <? Php <! - mclude -> requ_once (функции2.php) <! - / mclude ->?> Що не так з кодом?
користувач1567

1
@ user1567 згідно з прикладами це має бути щось на кшталт ?><!-- mclude -->functions2.php<!-- /mclude --><?php(я думаю :)
Найрідша

Не вдається отримати кешування фрагмента кешування. Тут описано моє питання: stackoverflow.com/questions/31125413/…
JackTheKnife

10

Для прошивки однієї сторінки за поштовим ідентифікатором в w3tc v0.9.3 я виявив, що це спрацювало:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}

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_secret FROM sb_settings");" і був здивований, що значення f_fb_secret і f_fb_app_id були однакові щоразу. Очевидно, кеш-пам'ять w3tc є результатом запиту. Тому я додав флеш dbcache на свою сторінку зміни для таблиці sb_settings.

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


Мені б хотілося, щоб нижня особа сказала, чому він сприяв. Чи є щось не так у моїй відповіді?
Елрінт

0

Використовуйте цей фрагмент, щоб переконатися, що PHP працює незалежно від того, кеш-пам'ять увімкнена чи вимкнена. Так, ви повинні написати / зателефонувати на свою функцію двічі.

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


(Я думаю) ось як це працює:

  • Умови mfunc замінюють теги php.
  • Якщо кешування вимкнено , коментарі php всередині mfunc відображаються у вашій розмітці як коментарі HTML. <!-- mfunc echo "hello?"; -->Майте це на увазі залежно від того, наскільки ви раді людям бачити ваш PHP (це відбувається лише тоді, коли кешування вимкнено).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.