Prevent Browser Caching

Descripción

¿Cambiaste el sitio, pero un cliente o visitante sigue viendo la versión antigua y tenés que decir “por favor, vaciá la caché de tu navegador”? Este plugin hace innecesaria esa conversación.

Prevent Browser Caching se asegura de que los navegadores siempre carguen la versión actual de tu sitio, sin desactivar la caché del navegador ni ralentizar el sitio.

Qué hace

  • Versiones de CSS y JS. WordPress carga los recursos con un parámetro “ver” en la URL (por ejemplo, style.css?ver=4.9.6). Los navegadores cachean el archivo hasta que este parámetro cambia. En el modo automático recomendado, el plugin establece la versión a partir de la propia fecha de modificación del archivo: la caché del navegador funciona a pleno rendimiento y, en el momento en que actualizás un archivo, todos los visitantes reciben el nuevo.
  • Versiones de imágenes. Cuando editás o reemplazás un archivo en la Biblioteca multimedia, los visitantes reciben la imagen nueva en lugar de la cacheada.
  • Frescura de las páginas HTML. Pide a los navegadores que comprueben si hay una versión más nueva de una página antes de mostrar una copia cacheada: soluciona el “en el celular sigo viendo la página antigua”.
  • Actualización en un clic. El botón “Actualizar versiones” de la barra de herramientas obliga a obtener copias nuevas de todos los recursos para cada visitante, y muestra un breve informe de lo que ocurrió exactamente.
  • La caché de páginas se mantiene sincronizada (opcional). Si hay un plugin de caché de páginas activo, actualizar las versiones también puede vaciar su caché, de modo que el HTML cacheado deja de hacer referencia a las versiones antiguas de los archivos y todos los visitantes ven el sitio nuevo de inmediato. Una casilla lo activa, y tras cada actualización el plugin informa de qué se actualizó y qué pasó con la caché de páginas. Funciona con WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, WP Fastest Cache, WP-Optimize, Breeze, Cache Enabler, Hummingbird, SiteGround Optimizer, Swift Performance y Comet Cache.
  • Visitas repetidas más rápidas (opcional, nuevo en la 3.2). Como el versionado garantiza la frescura, el plugin puede servir con seguridad tus archivos estáticos con cabeceras de caché del navegador de un año, la solución exacta para la auditoría de Lighthouse “Serve static assets with an efficient cache policy”. Escribe las reglas mediante la propia API de .htaccess de WordPress en Apache/LiteSpeed (se eliminan de nuevo al desactivar), muestra un fragmento listo para copiar para nginx, y luego obtiene realmente uno de tus archivos CSS para verificar que las cabeceras funcionan de verdad; el resultado se muestra en la página de ajustes.
  • Actualización automática tras las actualizaciones (opcional, nuevo en la 3.2). Las actualizaciones de plugins, temas y WordPress cambian los archivos CSS y JS. Con esta opción, cada actualización —incluidas las actualizaciones automáticas en segundo plano— va seguida de una actualización de versiones (y de un vaciado de la caché de páginas cuando esa opción está activada), así que los visitantes nunca ven un diseño roto tras una actualización.
  • CLI y agentes de IA. Los comandos de WP-CLI (wp pbc update, wp pbc status) y las WordPress Abilities permiten que los scripts de despliegue y los agentes de IA actualicen las versiones de forma segura.

Seguro de forma predeterminada

  • Las URL externas (scripts de pago, CDN, servicios de terceros) se dejan intactas: algunas se rompen cuando se les agrega un parámetro “ver” inesperado. Podés volver a activar el versionado externo con una casilla.
  • Se pueden excluir del versionado archivos concretos (por una parte de la URL) o identificadores de script/estilo, tanto CSS como JS e imágenes.
  • Si hay un plugin de caché de páginas activo, los encabezados que mantienen actualizado el HTML se deshabilitan automáticamente.
  • La caché de páginas de otro plugin nunca se vacía a menos que lo habilites vos mismo: la integración de vaciado al actualizar es opcional, y el informe después de cada actualización te indica si la caché de páginas se vació o se dejó intacta.
  • Las cabeceras de caché prolongada también son opcionales, y solo están disponibles mientras el versionado de CSS/JS está activado: el plugin nunca deja que los navegadores conserven archivos durante un año sin una forma de invalidarlos. Desactivar la opción (o desactivar el plugin) elimina las reglas por completo.

Modos de actualización

  • Automáticamente, cuando un archivo cambia (recomendado): versión = fecha de modificación del archivo. Cero clics, caché completa.
  • Cada vez que se carga una página: modo de desarrollo, el CSS y el JS nunca se cachean (las imágenes y las páginas no se ven afectadas). Usalo solo mientras estés desarrollando activamente.
  • Manualmente: las versiones cambian solo cuando hacés clic en el botón “Actualizar versiones”.

Para desarrolladores

La forma recomendada de establecer la versión de CSS/JS desde el código es el filtro pbc_assets_version. Agregá esto al archivo functions.php de tu tema y cambiá el valor siempre que necesites actualizar los recursos:

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

Como usa el propio add_filter() de WordPress, sigue funcionando de forma segura aunque alguna vez se desactive el plugin: tu sitio no se romperá.

Filtros para el ajuste fino:

  • pbc_skip_src( $skip, $src, $handle ): devuelve true para dejar intacta la URL de un recurso concreto.
  • pbc_assets_version( $ver, $src, $handle ): cambia la versión aplicada a un recurso concreto.
  • pbc_purge_page_cache( $purge, $plugin_name ): devuelve false para evitar el vaciado de la caché de páginas en las actualizaciones de versiones.
  • pbc_after_bump( $result ): acción que se ejecuta tras cada actualización de versiones, con la nueva marca de tiempo y el resultado del vaciado.
  • pbc_cache_policy_rules( $rules, $options ): cambia las reglas de caché prolongada generadas antes de que se escriban en el .htaccess (o se muestren como fragmento).
  • pbc_after_auto_bump( $context ): acción que se ejecuta tras una actualización automática de versiones posterior a una actualización, con el tipo de actualización y el resultado del vaciado.
  • PBC_DISABLE_HTACCESS_WRITE: definí esta constante como true (por ejemplo, en wp-config.php) y el plugin nunca escribirá el .htaccess por sí mismo; en su lugar, la página de ajustes muestra las reglas para la configuración manual.

WP-CLI

  • wp pbc update: actualiza las versiones (y vacía la caché de páginas detectada cuando la opción de los ajustes está activada). Agregá --skip-purge para no tocar la caché de páginas en esa ejecución.
  • wp pbc status: muestra el modo, qué se versiona, la última actualización manual y el plugin de caché de páginas detectado. Admite --format=table|json|yaml.

Abilities (agentes de IA y automatización)

En WordPress 6.9+ el plugin registra dos Abilities, detectables a través de la Abilities API, REST y el adaptador MCP, de modo que los agentes de IA y las herramientas de gestión de sitios pueden operar el plugin sin código de conexión personalizado:

  • prevent-browser-caching/bump-versions: actualiza las versiones; entrada booleana opcional purge (ponela en false para omitir el vaciado de la caché de páginas).
  • prevent-browser-caching/status: informe de solo lectura de la configuración actual.

Ambas requieren la capacidad manage_options.

Heredado: las versiones anteriores documentaban en su lugar una función prevent_browser_caching(). Sigue funcionando exactamente igual que antes —desactiva los ajustes de administración del plugin y te da control total—, pero recomiendo el filtro de arriba: una simple llamada a la función en functions.php provoca un error fatal si alguna vez se desactiva el plugin. Si seguís usando la función, protegela:

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

Gracias

Muchas de las mejoras recientes empezaron como informes y preguntas en el foro de soporte: gracias a todos los que se tomaron el tiempo de describir un problema o compartir una idea. Si algo no funciona como esperás en tu sitio, abrí un tema allí: de verdad ayuda a hacer el plugin mejor para todos.

Capturas

Instalación

Desde el escritorio de WordPress

  1. Visitá “Plugins > Agregar nuevo”.
  2. Buscá “Prevent Browser Caching”.
  3. Instalá y activá el plugin Prevent Browser Caching.

Desde el sitio WordPress.org

  1. Descargá el plugin Prevent Browser Caching.
  2. Subí la carpeta “prevent-browser-caching” a tu directorio “/wp-content/plugins/”.
  3. Activá Prevent Browser Caching en tu página de plugins.

Preguntas frecuentes

¿Afecta a la velocidad del sitio o al SEO?

Solo puede ayudar. En el modo automático recomendado, la caché del navegador sigue funcionando a pleno: los visitantes recurrentes cargan el CSS/JS desde su caché hasta que un archivo cambia realmente, por lo que las visitas repetidas siguen siendo igual de rápidas (más que con el antiguo valor predeterminado de la versión 2.x, que volvía a descargar los recursos en cada visita). Además, la opción «Acelerar», que se habilita de forma opcional, va más allá: agrega encabezados de caché de un año para tus archivos estáticos, la solución exacta para la auditoría «efficient cache policy» de Lighthouse. El costo para el servidor se limita a unas pocas consultas de la fecha de modificación de los archivos por página, algo insignificante. El parámetro «ver» de la URL es el mismo mecanismo que usa el núcleo de WordPress; los motores de búsqueda están totalmente acostumbrados a él y el plugin no cambia el contenido ni el marcado de tus páginas, ni las URL que ven los rastreadores.

¿Funciona junto con los plugins de caché de páginas?

Sí, y desde la 3.1.0 pueden colaborar activamente. Las URL versionadas de los recursos quedan en el HTML almacenado en caché como cualquier otra, por lo que servir HTML obsoleto antes también implicaba servir versiones antiguas de los recursos. Cuando está habilitada la casilla «Vaciar también la caché de páginas» en la página de ajustes, al seleccionar «Actualizar versiones» (desde la barra de herramientas, la página de ajustes, WP-CLI o una habilidad) también se vacía la caché del plugin de caché de páginas detectado, de modo que el HTML se vuelve a generar con las versiones nuevas. Compatibles: 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. La casilla está deshabilitada de forma predeterminada: la caché de otro plugin solo se modifica cuando vos lo indicás (por ejemplo, si tu caché de páginas solo se usa para los visitantes que no iniciaron sesión, quizás prefieras no volver a generarla con cada actualización). En cualquier caso, el informe que aparece después de cada actualización indica si la caché de páginas se vació, y la actualización de versiones siempre se completa aunque falle el vaciado. El plugin también sigue dejando los encabezados de caché del HTML a cargo del plugin de caché de páginas.

¿Funciona con maquetadores de páginas (Elementor, Divi, Beaver Builder…)?

Sí. Los constructores de páginas generan su CSS como archivos reales (normalmente en la carpeta uploads) y les asignan una versión nueva basada en la hora cada vez que los regeneran; Elementor, por ejemplo, sirve el CSS de cada página como post-123.css?ver=<generation time>, y esa versión cambia cada vez que se vuelve a escribir el archivo. Además, en el modo automático, este plugin agrega su propio componente de versión a partir de la fecha de modificación del archivo, por lo que incluso un archivo del constructor que se vuelva a escribir en el mismo lugar invalida su caché de inmediato. En conjunto, esto hace que la opción de caché prolongada también sea segura para los archivos de los constructores: sus URL siempre cambian cuando cambia su contenido.

¿Funciona con plugins de minificación (Autoptimize, WP-Optimize)?

Sí, verificado con ambos. Los minificadores incluyen un hash del contenido y las fechas de modificación de los archivos de origen en los nombres de los archivos que generan, así que esos archivos invalidan su propia caché por el nombre, y la opción de caché prolongada de aquí es justo la política adecuada para ellos: el CSS/JS minificado de WP-Optimize obtiene las cabeceras de un año y cambia de URL siempre que cambia un archivo de origen, mientras que Autoptimize sirve su carpeta de caché con su propia política equivalente de un año “immutable”, así que nunca entran en conflicto. Los archivos que el minificador deja intactos conservan el parámetro “ver” de este plugin, incluso cuando la opción “eliminar cadenas de consulta” del minificador está activada (este plugin agrega su versión después de ellas a propósito).

¿El modo automático vacía mi caché de páginas cuando cambia un archivo?

No, y es intencional, no un descuido. En el modo automático la versión proviene de la fecha de modificación del archivo, leída en el momento en que se genera una página; no “ocurre” nada en el servidor cuando subís un archivo modificado, así que no hay ningún evento con el que vaciar la caché de páginas. El HTML cacheado conserva las versiones antiguas de los recursos hasta que la caché de páginas caduca o se vacía. Después de cambios importantes, hacé clic en “Actualizar versiones”: con la opción “Vaciar también la caché de páginas” habilitada, eso actualiza las versiones y vacía la caché de páginas detectada en un solo clic.

¿Cómo soluciono la auditoría de Lighthouse “Serve static assets with an efficient cache policy”?

Habilitá “Permitir que los navegadores conserven los archivos estáticos durante un año” en la sección “Acelerar” de la página de ajustes (disponible mientras el versionado de CSS/JS está habilitado). El plugin sirve los archivos estáticos con Cache-Control: public, max-age=31536000, immutable, que es exactamente lo que pide la auditoría, y aquí es seguro, porque el plugin cambia la URL de un archivo siempre que el archivo cambia, así que los visitantes nunca se quedan con una copia obsoleta. Después de habilitarlo, la página de ajustes te indica si los encabezados se verificaron en tu sitio. Esa misma opción también resuelve el antiguo nombre de esta recomendación, “Leverage browser caching”, que todavía muestran GTmetrix y otras herramientas de análisis.

¿El plugin edita mi .htaccess?

Solo si habilitás la opción de caché prolongada, y solo usando la propia API de WordPress (la misma que usa el núcleo para los enlaces permanentes): un bloque claramente marcado entre # BEGIN Prevent Browser Caching y # END Prevent Browser Caching. El bloque se actualiza cuando cambiás ajustes relacionados, y se elimina por completo cuando deshabilitás la opción, desactivás o borrás el plugin. En multisitio, en nginx, o si definís la constante PBC_DISABLE_HTACCESS_WRITE, el plugin nunca escribe el archivo: en su lugar te muestra las reglas para agregarlas manualmente.

Mi plugin de caché ya agrega cabeceras de caché del navegador (expires). ¿Necesito ambos?

No, gestionalas en un solo lugar. Si tu plugin de caché ya sirve encabezados de larga duración para los archivos estáticos, podés dejar deshabilitada aquí la opción “Acelerar”: el versionado mantiene todo actualizado de todos modos. No se rompe nada si terminan habilitadas las dos —las reglas no entran en conflicto, simplemente gana el bloque posterior—, pero una única fuente es más limpia. La ventaja de gestionarlas aquí es que los encabezados están ligados al versionado (las URL cambian siempre que cambian los archivos, así que una caché de un año nunca puede mostrarle a nadie un archivo obsoleto) y la página de ajustes verifica que los encabezados funcionan realmente en tu servidor.

La página de ajustes dice que las cabeceras de caché no aparecen. ¿Y ahora qué?

Las reglas están configuradas, pero tu servidor no las aplicó: por lo general, al Apache de tu proveedor de hosting le faltan los módulos mod_headers/mod_expires o las sobrescrituras mediante .htaccess están deshabilitadas. Pedile a tu proveedor de hosting que habilite los módulos o copiá las reglas que aparecen en la página de ajustes a la configuración del servidor. Al guardar los ajustes, se vuelve a ejecutar la comprobación. Hasta que los encabezados funcionen, nada deja de funcionar: los navegadores simplemente siguen usando la caché como antes.

Excluí un archivo del versionado, ¿se cacheará igualmente durante un año?

Si es un archivo CSS/JS local que se sirve desde tu sitio: sí, las reglas de caché prolongada funcionan por la extensión del archivo y no ven tu lista de exclusiones. Las exclusiones casi siempre son URL externas (scripts de pago, CDN), que las reglas nunca tocan; pero si excluís un archivo local porque no debe cachearse durante mucho tiempo, o bien dejá desactivada la opción de caché prolongada, o bien agregá una regla más específica para ese archivo en la configuración de tu servidor.

¿Por qué los archivos externos no obtienen una versión de forma predeterminada?

Varios servicios externos —los scripts de pago en particular (PayPal, Braintree, Authorize.net)— rechazan las solicitudes con un parámetro de consulta “ver” inesperado, lo que solía romper los formularios de pago. Desde la 3.0.0, de forma predeterminada solo se versionan los archivos locales; hay una casilla para volver a incluir las URL externas si dependías de eso.

¿Pierdo la caché del navegador con este plugin?

No en el modo automático recomendado. Los archivos se cachean con normalidad; la versión solo cambia cuando el propio archivo cambia. El modo “cada vez que se carga una página” sí deshabilita la caché de CSS/JS: usalo solo durante el desarrollo activo.

La versión no se actualiza cada X minutos como la configuré. ¿Por qué?

El modo heredado “cada N minutos” funciona por visitante, usando una cookie: no reconstruye nada en el servidor mediante cron. Cada visitante obtiene una nueva versión de los recursos como mucho una vez por el intervalo elegido. Desde la 3.0.0, el modo automático es una mejor opción para casi todos los casos.

¿Versiona las imágenes dentro del contenido de las entradas?

Sí, cuando está habilitada la opción «Imágenes»: las URL de los adjuntos que genera WordPress reciben versiones de inmediato y las URL de imágenes escritas directamente en el contenido de las entradas reciben la versión multimedia de todo el sitio después de la primera actualización (al usar el botón «Actualizar versiones» o reemplazar un archivo multimedia).

Mi CDN ignora las cadenas de consulta.

Entonces el versionado mediante parámetro de consulta no puede invalidar la caché de ese CDN para esos archivos. Configurá el CDN para que incluya las cadenas de consulta en su clave de caché, o usá versionado basado en el nombre del archivo (por ejemplo, reemplazá un archivo con un nombre nuevo).

Mi sitio muestra un error después de desactivar el plugin.

Si agregaste prevent_browser_caching( ... ) al functions.php de tu tema, esa línea llama a una función que proporciona este plugin. Una vez desactivado el plugin, la función ya no existe, así que PHP se detiene con un error fatal. Dos formas de solucionarlo: cambiá al filtro pbc_assets_version (recomendado, nunca causa esto) o envolvé la llamada en if ( function_exists( 'prevent_browser_caching' ) ) { ... }. Mirá “Para desarrolladores” más arriba.

Reseñas

7 de julio de 2026
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!
17 de mayo de 2024
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.
29 de octubre de 2023
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!!!
14 de marzo de 2023
Fui obrigado a logar no forum para avaliar, é o unico plugin que realmente limpa o css e js, sempre que preciso estou aqui instalando
27 de febrero de 2023
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!
Leer todas las 29 reseñas

Colaboradores y desarrolladores

“Prevent Browser Caching” es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

“Prevent Browser Caching” ha sido traducido a 12 idiomas. Gracias a los traductores por sus contribuciones.

Traduce “Prevent Browser Caching” a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN , o suscríbete al log de desarrollo por RSS .

Registro de cambios

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

  • Nuevo: “Permitir que los navegadores conserven los archivos estáticos durante un año” (opcional, en la nueva sección de ajustes “Acelerar”): sirve CSS, JS, fuentes e imágenes con cabeceras Cache-Control/Expires de larga duración. Seguro por diseño: las URL versionadas cambian siempre que un archivo cambia, así que los visitantes siguen recibiendo las actualizaciones de inmediato. Soluciona la auditoría de Lighthouse “Serve static assets with an efficient cache policy”. En Apache/LiteSpeed las reglas se escriben mediante la propia API de .htaccess de WordPress y se eliminan de nuevo cuando se desactiva la opción o se desactiva/borra el plugin; en nginx y multisitio la página de ajustes muestra en su lugar un fragmento listo para copiar.
  • Nuevo: el plugin verifica los encabezados de caché prolongada obteniendo uno de los propios archivos CSS del sitio y muestra el resultado en la página de ajustes, así sabés si tu servidor aplicó realmente las reglas (algunos hostings carecen de los módulos de Apache necesarios; el plugin te lo dice en lugar de darlo por hecho en silencio).
  • Nuevo: “Actualizar las versiones automáticamente tras las actualizaciones de plugins, temas o WordPress” (opcional): cubre las actualizaciones manuales, en lote y automáticas en segundo plano, y vacía la caché de páginas cuando esa opción está activada. Usa la menor invalidación que permite tu modo: en el modo automático recomendado las versiones de los archivos ya se actualizan por sí solas, así que solo se vacía la caché de páginas. Esta función nunca toca las versiones de las imágenes.
  • Nuevo: una nota de “novedades” que se muestra una sola vez después de actualizar, solo en la propia página de ajustes del plugin (se puede descartar; no se agrega nada en ningún otro lugar de wp-admin).
  • Nuevo para desarrolladores: el filtro pbc_cache_policy_rules, la acción pbc_after_auto_bump y la constante PBC_DISABLE_HTACCESS_WRITE (fuerza el modo de solo fragmento, sin escritura de archivos).
  • wp pbc status y la habilidad de estado ahora también informan sobre el estado de la política de caché (incluido el resultado de la verificación) y el ajuste de actualización automática.
  • Corregido: un parámetro de consulta “ver” sin valor ya no se convierte en “ver=.123” tras una actualización de versiones.

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.