Prevent Browser Caching

Opis

Zmieniasz witrynę, a klient lub odwiedzający nadal widzi starą wersję i trzeba mówić „proszę wyczyścić pamięć podręczną przeglądarki”? Ta wtyczka sprawia, że taka rozmowa staje się niepotrzebna.

Prevent Browser Caching dba o to, aby przeglądarki zawsze wczytywały aktualną wersję twojej witryny — bez wyłączania pamięci podręcznej przeglądarki i spowalniania witryny.

Co robi

  • Wersje CSS i JS. WordPress wczytuje zasoby z parametrem „ver” w adresie URL (na przykład style.css?ver=4.9.6). Przeglądarki trzymają plik w pamięci podręcznej, dopóki ten parametr się nie zmieni. W zalecanym trybie automatycznym wtyczka ustawia wersję na podstawie czasu modyfikacji samego pliku: pamięć podręczna przeglądarki działa w pełni, a w chwili, gdy zaktualizujesz plik, każdy odwiedzający dostaje nowy.
  • Wersje obrazków. Gdy zmienisz lub zastąpisz plik w bibliotece multimediów, odwiedzający otrzymują nowy obrazek zamiast tego z pamięci podręcznej.
  • Aktualność stron HTML. Prosi przeglądarki, aby przed pokazaniem kopii z pamięci podręcznej sprawdziły, czy jest nowsza wersja strony — rozwiązuje problem „na telefonie nadal widzę starą stronę”.
  • Aktualizacja jednym kliknięciem. Przycisk „Zaktualizuj wersje” na pasku narzędzi wymusza pobranie nowych kopii wszystkich zasobów przez każdego odwiedzającego — i pokazuje krótki raport, co dokładnie się stało.
  • Pamięć podręczna strony pozostaje zsynchronizowana (opcjonalnie). Jeśli włączona jest wtyczka pamięci podręcznej strony, aktualizacja wersji może wyczyścić także jej pamięć podręczną — dzięki czemu zapisany kod HTML przestaje odwoływać się do starych wersji plików, a każdy odwiedzający od razu widzi nową witrynę. Włącza to jedno pole wyboru, a po każdej aktualizacji wtyczka zgłasza, co zostało odświeżone i co stało się z pamięcią podręczną strony. Działa z WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, WP-Optimize, Breeze, Cache Enabler, Hummingbird, SiteGround Optimizer, Swift Performance i Comet Cache.
  • Szybsze kolejne wizyty (opcjonalne, nowość w 3.2). Ponieważ wersjonowanie gwarantuje aktualność, wtyczka może bezpiecznie udostępniać twoje pliki statyczne z rocznymi nagłówkami pamięci podręcznej przeglądarki — czyli dokładnie tak, jak wymaga tego audyt Lighthouse „Serve static assets with an efficient cache policy”. Reguły zapisuje przez własne API .htaccess WordPressa na serwerach Apache/LiteSpeed (i usuwa je przy wyłączeniu wtyczki), dla nginx pokazuje gotowy do skopiowania fragment konfiguracji, a następnie faktycznie pobiera jeden z twoich plików CSS, aby sprawdzić, czy nagłówki naprawdę działają — wynik jest pokazany na stronie ustawień.
  • Automatyczne odświeżanie po aktualizacjach (opcjonalne, nowość w 3.2). Aktualizacje wtyczek, motywów i WordPressa zmieniają pliki CSS i JS. Przy tej opcji po każdej aktualizacji — także po automatycznej, w tle — następuje odświeżenie wersji (oraz wyczyszczenie pamięci podręcznej strony, gdy ta opcja jest włączona), więc odwiedzający nigdy nie zobaczą zepsutego układu po aktualizacji.
  • CLI i agenci AI. Polecenia WP-CLI (wp pbc update, wp pbc status) oraz możliwości WordPressa (Abilities) pozwalają skryptom wdrożeniowym i agentom AI bezpiecznie aktualizować wersje.

Domyślnie bezpieczne

  • Zewnętrzne adresy URL (skrypty płatności, CDN, usługi stron trzecich) pozostają nietknięte — niektóre z nich psują się, gdy doda się nieoczekiwany parametr „ver”. Wersjonowanie zewnętrznych adresów można z powrotem włączyć jednym polem wyboru.
  • Konkretne pliki (po fragmencie adresu URL) albo identyfikatory skryptów i stylów można wykluczyć z wersjonowania — zarówno CSS i JS, jak i obrazki.
  • Jeśli włączona jest wtyczka pamięci podręcznej strony, nagłówki aktualności HTML automatycznie ustępują jej miejsca.
  • Pamięć podręczna strony innej wtyczki nigdy nie jest czyszczona, dopóki tego nie włączysz — integracja czyszczenia przy aktualizacji jest opcjonalna, a raport po każdej aktualizacji mówi, czy pamięć podręczna strony została wyczyszczona, czy pozostawiona bez zmian.
  • Nagłówki długotrwałej pamięci podręcznej również są opcjonalne i dostępne tylko wtedy, gdy włączone jest wersjonowanie CSS/JS — wtyczka nigdy nie pozwala przeglądarkom trzymać plików przez rok bez sposobu na ich odświeżenie. Wyłączenie tej opcji (lub wyłączenie wtyczki) usuwa reguły w całości.

Tryby aktualizacji

  • Automatycznie, gdy plik się zmieni (zalecane) — wersja = czas modyfikacji pliku. Zero kliknięć, pełna pamięć podręczna.
  • Przy każdym wczytaniu strony — tryb deweloperski: CSS i JS nigdy nie trafiają do pamięci podręcznej (obrazki i strony pozostają bez zmian). Używaj go tylko podczas aktywnej pracy nad kodem.
  • Ręcznie — wersje zmieniają się tylko po naciśnięciu przycisku „Zaktualizuj wersje”.

Dla programistów

Zalecanym sposobem ustawiania wersji CSS/JS z poziomu kodu jest filtr pbc_assets_version. Dodaj to do pliku functions.php swojego motywu i zmieniaj wartość zawsze, gdy trzeba zaktualizować zasoby:

add_filter( 'pbc_assets_version', function( $ver ) {
    return '123';
} );

Ponieważ korzysta z add_filter() samego WordPressa, działa bezpiecznie nawet wtedy, gdy wtyczka zostanie kiedyś wyłączona — twoja witryna się nie zepsuje.

Filtry do precyzyjnych ustawień:

  • pbc_skip_src( $skip, $src, $handle ) — zwróć true, aby pozostawić adres URL danego zasobu bez zmian.
  • pbc_assets_version( $ver, $src, $handle ) — zmienia wersję stosowaną do danego zasobu.
  • pbc_purge_page_cache( $purge, $plugin_name ) — zwróć false, aby zapobiec czyszczeniu pamięci podręcznej strony przy aktualizacjach wersji.
  • pbc_after_bump( $result ) — akcja wywoływana po każdej aktualizacji wersji, z nowym znacznikiem czasu i wynikiem czyszczenia.
  • pbc_cache_policy_rules( $rules, $options ) — zmienia wygenerowane reguły długotrwałej pamięci podręcznej, zanim zostaną zapisane w pliku .htaccess (lub pokazane jako fragment kodu).
  • pbc_after_auto_bump( $context ) — akcja wywoływana po automatycznym odświeżeniu następującym po aktualizacji, z rodzajem aktualizacji i wynikiem czyszczenia pamięci podręcznej.
  • PBC_DISABLE_HTACCESS_WRITE — zdefiniuj tę stałą jako true (na przykład w wp-config.php), a wtyczka nigdy sama nie zapisze pliku .htaccess; zamiast tego strona ustawień pokaże reguły do ręcznej konfiguracji.

WP-CLI

  • wp pbc update — aktualizuje wersje (i czyści wykrytą pamięć podręczną strony, gdy odpowiednia opcja jest włączona). Dodaj --skip-purge, aby w danym przebiegu nie ruszać pamięci podręcznej strony.
  • wp pbc status — pokazuje tryb, co jest wersjonowane, ostatnią ręczną aktualizację oraz wykrytą wtyczkę pamięci podręcznej strony. Obsługuje --format=table|json|yaml.

Możliwości (Abilities) — agenci AI i automatyzacja

W WordPressie 6.9+ wtyczka rejestruje dwie możliwości (Abilities), wykrywalne przez Abilities API, REST i adapter MCP — dzięki czemu agenci AI oraz narzędzia do zarządzania witrynami mogą obsługiwać wtyczkę bez pisania dodatkowego kodu:

  • prevent-browser-caching/bump-versions — aktualizuje wersje; opcjonalne wejście logiczne purge (ustaw false, aby pominąć czyszczenie pamięci podręcznej strony).
  • prevent-browser-caching/status — raport o obecnej konfiguracji, tylko do odczytu.

Obie wymagają uprawnienia manage_options.

Rozwiązanie przestarzałe: wcześniejsze wersje dokumentowały zamiast tego funkcję prevent_browser_caching(). Nadal działa dokładnie tak jak wcześniej — wyłącza ustawienia wtyczki w panelu administracyjnym i daje pełną kontrolę — ale zalecam powyższy filtr: samo wywołanie funkcji w pliku functions.php powoduje błąd krytyczny, jeśli wtyczka kiedykolwiek zostanie wyłączona. Jeśli nadal korzystasz z tej funkcji, zabezpiecz ją:

if ( function_exists( 'prevent_browser_caching' ) ) {
    prevent_browser_caching( array(
        'assets_version' => '123'
    ) );
}

Dziękuję

Wiele z ostatnich ulepszeń zaczęło się od zgłoszeń i pytań na forum wsparcia — dziękuję wszystkim, którzy poświęcili czas, aby opisać problem lub podzielić się pomysłem. Jeśli coś nie działa na twojej witrynie tak, jak powinno, załóż tam wątek: to naprawdę pomaga ulepszać wtyczkę dla wszystkich.

Zrzuty ekranu

Instalacja

Z kokpitu WordPressa

  1. Przejdź do „Wtyczki > Dodaj nową”.
  2. Wyszukaj „Prevent Browser Caching”.
  3. Zainstaluj i włącz wtyczkę Prevent Browser Caching.

Z witryny WordPress.org

  1. Pobierz wtyczkę Prevent Browser Caching.
  2. Prześlij katalog „prevent-browser-caching” do katalogu „/wp-content/plugins/”.
  3. Włącz wtyczkę Prevent Browser Caching na stronie Wtyczki.

Najczęściej zadawane pytania

Czy wpływa na szybkość witryny lub SEO?

Może tylko pomóc. W zalecanym trybie automatycznym pamięć podręczna przeglądarki działa w pełni — powracający odwiedzający wczytują CSS/JS ze swojej pamięci podręcznej, dopóki plik naprawdę się nie zmieni, więc kolejne wizyty są tak szybkie jak zawsze (szybsze niż przy domyślnym zachowaniu starych wersji 2.x, które pobierały zasoby ponownie przy każdej wizycie). A opcjonalna funkcja „Przyspiesz” idzie dalej: roczne nagłówki pamięci podręcznej dla twoich plików statycznych — czyli dokładnie to, czego wymaga audyt Lighthouse „efficient cache policy”. Koszt po stronie serwera to kilka odczytów czasu modyfikacji plików na stronę — pomijalny. Parametr „ver” w adresie URL to ten sam mechanizm, którego używa sam WordPress, wyszukiwarki są do niego doskonale przyzwyczajone, a wtyczka nie zmienia treści stron, kodu HTML ani adresów URL widzianych przez roboty.

Czy działa razem z wtyczkami pamięci podręcznej strony?

Tak — a od wersji 3.1.0 mogą aktywnie współpracować. Wersjonowane adresy zasobów trafiają do zapisanego kodu HTML jak wszystkie inne, więc udostępnianie nieaktualnego HTML oznaczało wcześniej udostępnianie razem z nim starych wersji zasobów. Gdy na stronie ustawień zaznaczone jest pole „Czyść także pamięć podręczną strony”, naciśnięcie „Zaktualizuj wersje” (na pasku narzędzi, na stronie ustawień, przez WP-CLI lub przez możliwość z Abilities API) czyści również pamięć podręczną wykrytej wtyczki, dzięki czemu ten kod HTML jest generowany na nowo z nowymi wersjami. Obsługiwane: WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, WP-Optimize, Breeze, Cache Enabler, Hummingbird, SiteGround Optimizer, Swift Performance, Comet Cache. To pole jest domyślnie wyłączone — pamięć podręczna innej wtyczki jest ruszana tylko wtedy, gdy to włączysz (jeśli na przykład twoja pamięć podręczna strony obsługuje wyłącznie niezalogowanych odwiedzających, możesz woleć nie odbudowywać jej przy każdej aktualizacji). Tak czy inaczej raport pokazywany po każdej aktualizacji mówi, czy pamięć podręczna strony została wyczyszczona, a aktualizacja wersji zawsze dochodzi do końca, nawet jeśli czyszczenie się nie powiedzie. Wtyczka nadal pozostawia nagłówki pamięci podręcznej HTML wtyczce pamięci podręcznej strony.

Czy działa z kreatorami stron (Elementor, Divi, Beaver Builder…)?

Tak. Kreatory stron generują swój CSS jako prawdziwe pliki (zwykle w katalogu uploads) i przy każdej regeneracji nadają im nową wersję opartą na czasie — Elementor na przykład udostępnia CSS poszczególnych stron jako post-123.css?ver=<generation time>, a ta wersja zmienia się za każdym razem, gdy plik jest zapisywany na nowo. Dodatkowo w trybie automatycznym ta wtyczka dokłada własny składnik wersji z czasu modyfikacji pliku, więc nawet plik kreatora nadpisany w miejscu natychmiast odświeża swoją pamięć podręczną. Razem sprawia to, że opcja długotrwałej pamięci podręcznej jest bezpieczna także dla plików kreatorów: ich adresy URL zawsze zmieniają się wtedy, gdy zmienia się ich treść.

Czy działa z wtyczkami do minifikacji (Autoptimize, WP-Optimize)?

Tak — sprawdzone z obiema. Narzędzia do minifikacji umieszczają w nazwach generowanych plików skrót zawartości i czas modyfikacji plików źródłowych, więc te pliki same odświeżają swoją pamięć podręczną przez nazwę — a tutejsza opcja długotrwałej pamięci podręcznej to dla nich dokładnie właściwa polityka: zminifikowane pliki CSS/JS z WP-Optimize dostają roczne nagłówki i zmieniają adres URL zawsze, gdy zmieni się plik źródłowy, natomiast Autoptimize udostępnia swój katalog pamięci podręcznej z własną, równoważną roczną polityką immutable, więc te dwa mechanizmy nigdy ze sobą nie walczą. Pliki, których minifikator nie rusza, zachowują parametr „ver” tej wtyczki — nawet gdy włączona jest w nim opcja usuwania parametrów zapytania (ta wtyczka celowo dodaje swoją wersję po nich).

Czy tryb automatyczny czyści moją pamięć podręczną strony, gdy plik się zmieni?

Nie — i to celowo, a nie przez przeoczenie. W trybie automatycznym wersja pochodzi z czasu modyfikacji pliku, odczytywanego w chwili renderowania strony; nic „nie dzieje się” na serwerze, gdy wysyłasz zmieniony plik, więc nie ma zdarzenia, przy którym można by wyczyścić pamięć podręczną strony. Zapisany kod HTML zachowuje stare wersje zasobów, dopóki pamięć podręczna strony nie wygaśnie albo nie zostanie wyczyszczona. Po większych zmianach naciśnij „Zaktualizuj wersje” — przy włączonej opcji „Czyść także pamięć podręczną strony” jedno kliknięcie zaktualizuje wersje i wyczyści wykrytą pamięć podręczną strony.

Jak naprawić wynik audytu Lighthouse „Serve static assets with an efficient cache policy”?

Włącz „Pozwól przeglądarkom przechowywać pliki statyczne przez rok” w sekcji „Przyspiesz” na stronie ustawień (opcja jest dostępna, gdy wersjonowanie CSS/JS jest włączone). Wtyczka udostępnia pliki statyczne z nagłówkiem Cache-Control: public, max-age=31536000, immutable, czyli dokładnie tak, jak wymaga tego audyt — i jest to tutaj bezpieczne, ponieważ wtyczka zmienia adres URL pliku za każdym razem, gdy plik się zmienia, więc odwiedzający nigdy nie utkną ze starą kopią. Po włączeniu strona ustawień informuje, czy nagłówki zostały zweryfikowane na twojej witrynie. Ta sama opcja rozwiązuje też starszą wersję tego zalecenia — „Leverage browser caching” — nadal pokazywaną przez GTmetrix i inne narzędzia testujące.

Czy wtyczka zmienia mój plik .htaccess?

Tylko jeśli włączysz opcję długotrwałej pamięci podręcznej i wyłącznie za pomocą API samego WordPressa (tego samego, którego WordPress używa do bezpośrednich odnośników): to wyraźnie oznaczony blok między # BEGIN Prevent Browser Caching a # END Prevent Browser Caching. Blok jest aktualizowany, gdy zmieniasz powiązane ustawienia, i usuwany w całości, gdy wyłączysz tę opcję, wyłączysz wtyczkę lub ją usuniesz. W sieci witryn, na nginx oraz gdy zdefiniujesz stałą PBC_DISABLE_HTACCESS_WRITE, wtyczka nigdy nie zapisuje tego pliku — zamiast tego pokazuje reguły do dodania ręcznie.

Moja wtyczka pamięci podręcznej już dodaje nagłówki pamięci podręcznej przeglądarki (expires). Czy potrzebuję obu?

Nie — zarządzaj nimi w jednym miejscu. Jeśli twoja wtyczka pamięci podręcznej już udostępnia długotrwałe nagłówki dla plików statycznych, możesz pozostawić tutejszą opcję „Przyspiesz” wyłączoną: wersjonowanie i tak dba o aktualność. Nic się nie zepsuje, jeśli obie zostaną włączone — reguły nie kolidują ze sobą, po prostu wygrywa późniejszy blok — ale jedno źródło jest czystsze. Zaletą zarządzania nimi tutaj jest to, że nagłówki są powiązane z wersjonowaniem (adresy URL zmieniają się zawsze, gdy zmieniają się pliki, więc roczna pamięć podręczna nigdy nie pokaże nikomu przestarzałego pliku), a strona ustawień sprawdza, czy nagłówki faktycznie działają na twoim serwerze.

Strona ustawień informuje, że nagłówki pamięci podręcznej się nie pojawiają. Co teraz?

Reguły są na miejscu, ale twój serwer ich nie zastosował — najczęściej Apache u hostingodawcy nie ma modułów mod_headers/mod_expires albo nadpisywanie przez .htaccess jest wyłączone. Poproś hostingodawcę o ich włączenie albo skopiuj reguły pokazane na stronie ustawień do konfiguracji serwera. Zapisanie ustawień uruchamia sprawdzenie ponownie. Dopóki nagłówki nie działają, nic się nie psuje — przeglądarki po prostu korzystają z pamięci podręcznej tak jak wcześniej.

Plik wykluczony z wersjonowania — czy nadal będzie przechowywany przez rok?

Jeśli to lokalny plik CSS/JS udostępniany z twojej witryny: tak — reguły długotrwałej pamięci podręcznej działają na podstawie rozszerzenia pliku i nie widzą twojej listy wykluczeń. Wykluczenia to prawie zawsze zewnętrzne adresy URL (skrypty płatności, CDN), których te reguły nigdy nie dotyczą — ale jeśli wykluczasz lokalny plik dlatego, że nie może być długo przechowywany w pamięci podręcznej, albo pozostaw opcję długotrwałej pamięci podręcznej wyłączoną, albo dodaj węższą regułę dla tego pliku w konfiguracji serwera.

Dlaczego pliki zewnętrzne domyślnie nie dostają wersji?

Kilka usług zewnętrznych — zwłaszcza skrypty płatności (PayPal, Braintree, Authorize.net) — odrzuca żądania z nieoczekiwanym parametrem zapytania „ver”, co potrafiło psuć formularze zamówienia. Od wersji 3.0.0 domyślnie wersjonowane są tylko pliki lokalne; jest pole wyboru, które ponownie obejmuje zewnętrzne adresy URL, jeśli ktoś na tym polegał.

Czy przez tę wtyczkę tracę pamięć podręczną przeglądarki?

Nie w zalecanym trybie automatycznym. Pliki są normalnie przechowywane w pamięci podręcznej; wersja zmienia się tylko wtedy, gdy zmieni się sam plik. Tryb „przy każdym wczytaniu strony” faktycznie wyłącza przechowywanie CSS/JS w pamięci podręcznej — używaj go tylko podczas aktywnej pracy nad witryną.

Wersja nie aktualizuje się co X minut, mimo takiego ustawienia. Dlaczego?

Przestarzały tryb „co N minut” działa osobno dla każdego odwiedzającego, przy użyciu pliku ciasteczka — nie przebudowuje niczego na serwerze przez cron. Każdy odwiedzający dostaje nową wersję zasobów nie częściej niż co wybrany odstęp czasu. Od wersji 3.0.0 tryb automatyczny jest lepszym wyborem w niemal każdym przypadku.

Czy wersjonuje obrazki w treści wpisów?

Tak, gdy włączona jest opcja „Obrazki”: adresy URL załączników renderowane przez WordPressa dostają wersje natychmiast, a adresy obrazków wpisane na stałe w treści wpisów dostają ogólnowitrynową wersję multimediów po pierwszej aktualizacji (przycisk „Zaktualizuj wersje” albo zastąpienie pliku multimedialnego).

Mój CDN ignoruje parametry zapytania.

Wtedy wersjonowanie przez parametr zapytania nie odświeży pamięci podręcznej tego CDN dla tych plików. Skonfiguruj CDN tak, aby uwzględniał parametry zapytania w kluczu pamięci podręcznej, albo użyj wersjonowania przez nazwę pliku (na przykład zastąp plik nową nazwą).

Po wyłączeniu wtyczki moja witryna pokazuje błąd.

Jeśli w pliku functions.php swojego motywu dodano prevent_browser_caching( ... ), to ten wiersz wywołuje funkcję dostarczaną przez tę wtyczkę. Po wyłączeniu wtyczki funkcja przestaje istnieć, więc PHP zatrzymuje się z błędem krytycznym. Są dwa sposoby, aby to naprawić: przejść na filtr pbc_assets_version (zalecane — on nigdy tego nie powoduje) albo owinąć wywołanie w if ( function_exists( 'prevent_browser_caching' ) ) { ... }. Zobacz „Dla programistów” powyżej.

Recenzje

2026-07-07
The new features in 3.x versions raise a very good plugin to excellent! A must to empty users’ browser caches after we make big design changes. Thank you!
2024-05-17
It is the first plugin that I install every time I create a new site, this plugin is the web designer’s best friend, it instantly clears the browser cache and refreshes the page with one click, saving me a lot of time when I update and design the site, avoiding long trips in the browser, also works to show the page to customers, a heartfelt thank you.
2023-10-29
10-30-23 I do not how this thing does it, but it just solved my problem that was bothering me for weeks and my hosting co could not help. I added this plugin (did not even need to change a setting) and now my changes show up on websites especially the CSS. thank you so much- you are so helpful and what you created is valuable!!!
2023-03-14
Fui obrigado a logar no forum para avaliar, é o unico plugin que realmente limpa o css e js, sempre que preciso estou aqui instalando
2023-02-27
I found this plugin while searching for a way to prevent CSS files from caching while working with a particularly annoying theme (A****). This works perfectly and I will use it on every website I’m developing from this point forwards. Thank you!
Przeczytaj 29 recenzji

Kontrybutorzy i deweloperzy

„Prevent Browser Caching” jest oprogramowaniem open source. Poniższe osoby miały wkład w rozwój wtyczki.

Zaangażowani

Wtyczka „Prevent Browser Caching” została przetłumaczona na 12 języków. Podziękuj tłumaczom za ich wkład.

Przetłumacz wtyczkę “Prevent Browser Caching” na swój język.

Interesuje cię rozwój wtyczki?

Przeglądaj kod, sprawdź repozytorium SVN lub czytaj dziennik rozwoju przez RSS.

Rejestr zmian

3.2.1

  • Fixed: a caching plugin that is installed but has its page caching switched off (for example WP-Optimize used only for database cleanup or image compression) is no longer treated as an active page cache. The „… is active, so page caching headers are left to it” note and the „Also clear the page cache” option now appear only when page caching is really enabled, and the „Pages (HTML)” option works in that situation instead of silently stepping aside. The check mirrors each supported plugin’s own on/off state and safely falls back to the previous behavior when that state can’t be read. Props @jcollier for the report.

3.2.0

  • Nowość: „Pozwól przeglądarkom przechowywać pliki statyczne przez rok” (opcjonalne, w nowej sekcji ustawień „Przyspiesz”) — udostępnia pliki CSS, JS, kroje pisma i obrazki z długotrwałymi nagłówkami Cache-Control/Expires. Bezpieczne z założenia: wersjonowane adresy URL zmieniają się zawsze, gdy zmienia się plik, więc odwiedzający nadal otrzymują aktualizacje natychmiast. Rozwiązuje problem zgłaszany w audycie Lighthouse „Serve static assets with an efficient cache policy”. Na Apache/LiteSpeed reguły są zapisywane przez własne API .htaccess WordPressa i usuwane, gdy opcja zostanie wyłączona albo wtyczka wyłączona lub usunięta; na nginx i w sieci witryn strona ustawień pokazuje zamiast tego gotowy do skopiowania fragment konfiguracji.
  • Nowość: wtyczka sprawdza nagłówki długotrwałej pamięci podręcznej, pobierając jeden z plików CSS samej witryny, i pokazuje wynik na stronie ustawień — dzięki temu wiadomo, czy serwer faktycznie zastosował reguły (u części hostingodawców brakuje potrzebnych modułów Apache; wtyczka informuje o tym, zamiast milcząco zakładać, że wszystko działa).
  • Nowość: „Automatycznie odświeżaj wersje po aktualizacjach wtyczek, motywów lub WordPressa” (opcjonalne) — obejmuje aktualizacje ręczne, zbiorcze i automatyczne w tle, a także czyści pamięć podręczną strony, gdy ta opcja jest włączona. Unieważnia tyle, ile pozwala dany tryb: w zalecanym trybie automatycznym wersje plików aktualizują się już same, więc czyszczona jest tylko pamięć podręczna strony. Ta funkcja nigdy nie rusza wersji obrazków.
  • Nowość: jednorazowa notatka „co nowego” po aktualizacji, pokazywana tylko na stronie ustawień samej wtyczki (można ją odrzucić; nic nie jest dodawane w innych miejscach panelu administracyjnego).
  • Nowość dla programistów: filtr pbc_cache_policy_rules, akcja pbc_after_auto_bump oraz stała PBC_DISABLE_HTACCESS_WRITE (wymusza tryb samego fragmentu kodu, bez zapisu do pliku).
  • wp pbc status oraz możliwość status zgłaszają teraz także stan polityki pamięci podręcznej (w tym wynik weryfikacji) i ustawienie automatycznego odświeżania.
  • Poprawka: pusty parametr zapytania „ver” nie zamienia się już w „ver=.123” po aktualizacji wersji.

3.1.0

  • New: „Update versions” can now also clear the page cache when one of the supported caching plugins is active — WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, WP-Optimize, Breeze, Cache Enabler, Hummingbird, SiteGround Optimizer, Swift Performance, Comet Cache. Fixes „I updated the versions, but visitors still got the old design from the page cache”. Opt-in: a settings checkbox turns it on (off by default — another plugin’s cache is only touched when you say so). Each plugin is purged through its own public API; every call is guarded, and the version update always completes even if a purge fails.
  • New: after every „Update versions” click the plugin reports what happened — which asset types got new versions (per your settings) and whether the detected page cache was cleared. The report shows inline on the settings page and as a one-time notice after using the toolbar button.
  • New: WP-CLI support — wp pbc update [--skip-purge] and wp pbc status [--format=table|json|yaml].
  • New: on WordPress 6.9+ the plugin registers two Abilities for AI agents and automation, prevent-browser-caching/bump-versions and prevent-browser-caching/status (Abilities API / REST / MCP adapter; require the manage_options capability).
  • New for developers: the pbc_purge_page_cache filter (veto the purge) and the pbc_after_bump action (observe every version update and its purge outcome).
  • Fixed: image URLs inside RSS feeds no longer get a „ver” parameter.
  • Fixed: an existing „ver” query parameter in image URLs is now detected precisely — a „ver=” fragment inside another parameter name no longer counts as one.
  • Housekeeping: uninstall on multisite now cleans up networks with more than 100 sites.

3.0.0

  • New automatic mode (now the recommended default): the assets version is taken from the file modification time, so browser caching works at full strength and busts exactly when a file changes.
  • External URLs (payment scripts, CDNs) are no longer versioned by default — this used to break PayPal/Braintree/Authorize.net checkouts. A checkbox brings external versioning back; sites upgrading with saved settings keep their previous behavior until they switch.
  • New: image cache busting. Attachment URLs are versioned; editing or replacing a media file busts its cache.
  • New: HTML page freshness — optional Cache-Control header asking browsers to revalidate pages, plus a back/forward-cache guard for stale pages on mobile. Steps aside automatically when a page-cache plugin is detected.
  • New: exclusions list (URL substrings or script/style handles) and pbc_skip_src / pbc_assets_version filters for developers.
  • New: optional cache busting in the admin area.
  • New settings screen: a few clear switches, details unfold when you need them. Sites upgrading from 2.x get a one-click „Enable recommended settings” banner (reversible).
  • The toolbar button is now called „Update versions”: it updates the versions of CSS/JS files and images.
  • After activation the plugin opens its settings page.
  • Full backward compatibility: the prevent_browser_caching() function, all 2.x options and the filter timing work exactly as before.
  • Recommended for developers: use the pbc_assets_version filter instead of the prevent_browser_caching() function — unlike a bare function call, it never causes a fatal error if the plugin is deactivated.
  • Fixed: PHP warning „Cannot modify header information” when another plugin printed output before the cookie was set.
  • Fixed: the manual update button on the settings page submitted the whole form.
  • Housekeeping: uninstall now removes all plugin options (multisite-aware); all strings are translatable; added a POT file; direct-access guards on all files.
  • Raised the minimum PHP version to 7.2 (matches the WordPress minimum). Tested on PHP up to 8.5.

2.3.7

  • Fixed a bug with URLs that contain repeated query params: only the last one survived after adding the „ver” param. For example, Google Fonts URLs with several „family” params lost all font families except the last one.
  • Tested the plugin in WordPress 7.0.
  • Declared the minimum required PHP version (5.6).

2.3.6

  • Tested the plugin in WordPress 6.9.

2.3.5

  • Tested the plugin in WordPress 6.5.

2.3.4

  • Tested the plugin in WordPress 6.1.

2.3.3

  • Tested the plugin in WordPress 6.0.

2.3.2

  • Fixed „Update CSS/JS” button in the admin bar.

2.3.1

  • Tested the plugin in WordPress 5.1.

2.3

  • Tested the plugin in WordPress 5.0-beta1 and optimized the code.

2.2

  • Added function „prevent_browser_caching” which disables all admin settings of this plugin and allows to set the new settings.
  • Changing „ver” param instead of adding additional „time” param.

2.1

  • Added option to show „Update CSS/JS” button on the toolbar.

2.0

  • Added setting page to the admin panel.
  • Added automatically updating CSS and JS files every period for individual user
  • Added manually updating CSS and JS files for all site visitors

1.1

  • Added plugin text domain.

1.0

  • First version of Prevent Browser Caching plugin.