=== Reemplazar Texto Frontend ===
Contributors: carlosraffe
Tags: replace, text, frontend, elementor, gettext
Requires at least: 6.0
Requires PHP: 8.0
Stable tag: 1.0.10
License: GPLv2 or later

Reemplaza cadenas exactas visibles únicamente en el frontend desde una interfaz administrativa moderna.

== Description ==

Reemplazar Texto Frontend permite crear pares de texto original y texto de reemplazo desde el panel de WordPress.

Características:
* Solo actúa en el frontend.
* Coincidencia literal y sensible a mayúsculas/minúsculas, en cualquier parte del texto.
* Compatible con cadenas gettext de WordPress.
* Procesa textos visibles generados por Elementor, temas, plugins y JavaScript.
* Observa contenido dinámico añadido después de la carga inicial.
* Permite crear y eliminar tantas reglas como necesites.
* Sistema de actualización remota desde una carpeta web privada.
* Compatible con PHP 8.x y WordPress 6.x/7.x.
* No requiere servicios externos.

== Private updates ==

El repositorio está fijo en el código: https://carlosraffe.sensatoweb.com/actualizaciones/traductor/

Esa carpeta contiene:
* update.php, que escanea automáticamente cualquier archivo traductor*.zip.
* Los ZIP publicados de las distintas versiones.

update.php abre cada ZIP y lee la cabecera Version real de traductor-frontend.php. El nombre del ZIP ya no determina la versión; solo debe comenzar por "traductor" y terminar en ".zip". Puede conservar versiones antiguas en la misma carpeta: siempre se publica la versión interna más alta.

El plugin usa exclusivamente el filtro nativo update_plugins_{hostname} derivado de la cabecera Update URI de WordPress 5.8+. No mantiene una caché privada paralela de actualizaciones.

== Installation ==

1. Instala el ZIP desde Plugins > Añadir plugin > Subir plugin.
2. Activa “Reemplazar Texto Frontend”.
3. Abre el menú “Reemplazar Texto”.
4. Añade el texto original y su texto de reemplazo.
5. Guarda los cambios.

== Changelog ==

= 1.0.10 =
* Rehace el actualizador usando exclusivamente el flujo nativo de WordPress basado en la cabecera Update URI y el filtro update_plugins_{hostname}.
* Elimina los filtros paralelos site_transient_update_plugins y pre_set_site_transient_update_plugins y elimina la caché privada de 6 horas.
* El endpoint estable sigue siendo update.php para que instalaciones 1.0.8 puedan detectar esta versión directamente.
* update.php adopta la lógica robusta de biPANEL: busca cualquier traductor*.zip, abre cada ZIP, lee la cabecera Version real y publica automáticamente la versión más alta.
* Ya no es obligatorio codificar la versión en el nombre del ZIP.

= 1.0.8 =
* IMPORTANTE: el reemplazo ya no exige que coincida el texto completo del elemento. Ahora sustituye el texto donde aparezca, así que puedes cambiar una sola palabra dentro de un título o párrafo (por ejemplo "acompañamos" por "llevamos").
* Se sustituyen todas las apariciones, no solo la primera.
* Si dos reglas empiezan igual, gana la más larga. Las reglas no se encadenan entre sí.
* Sigue siendo literal y sensible a mayúsculas/minúsculas, respetando espacios y acentos.

= 1.0.7 =
* El plugin pasa a llamarse "Reemplazar Texto Frontend" (antes "Traductor Frontend"). La carpeta y el slug internos siguen siendo traductor-frontend para no romper las actualizaciones.
* Icono nuevo, de estilo moderno, en el encabezado y en el menú del escritorio.
* La columna "Texto traducido" ahora se llama "Texto de reemplazo"; la terminología de la pantalla usa "reemplazos" en vez de "traducciones".

= 1.0.6 =
* CORRIGE que WordPress no detectara las actualizaciones. Ahora se engancha también a la LECTURA del transient (site_transient_update_plugins), así que la actualización aparece sin esperar a que WordPress reescriba su caché de 12 horas.
* La cabecera "Update URI" ya no es false: apunta al repositorio y se implementa el filtro update_plugins_{hostname} de WordPress 5.8+.
* El botón nativo "Volver a comprobar" de Escritorio > Actualizaciones ahora fuerza una consulta real al repositorio.
* El plugin ya no comprueba actualizaciones por su cuenta: se elimina el botón "Comprobar actualizaciones ahora", sus avisos y el mensaje de error.
* El repositorio se consulta con update.php y, si el servidor no lo ejecuta o no existe, cae automáticamente a update.json.

= 1.0.5 =
* El plugin ahora pide `update.php` en vez de `update.json`. Ese script (se sube una sola vez a la carpeta) escanea los ZIP publicados y detecta solo cuál es la versión más alta.
* De aquí en adelante, publicar una versión nueva es solo subir el ZIP con el nombre correcto; no hay que tocar ningún JSON a mano.

= 1.0.4 =
* El repositorio de actualizaciones queda fijo en el código (`https://carlosraffe.sensatoweb.com/actualizaciones/traductor/`); ya no se muestra ni se edita desde el backend.
* Se quita la card "Repositorio de actualizaciones" y el grid informativo ("Cómo funciona", "Contenido dinámico", "Actualizaciones privadas").
* Se conserva el botón "Comprobar actualizaciones ahora".

= 1.0.3 =
* Quita del backend los avisos/banners de OTROS plugins (ej. notificaciones de actualización de terceros) que WordPress inyectaba en la pantalla de Traductor Frontend.
* Elimina los pills decorativos ("Solo frontend", "Coincidencia exacta", "Elementor compatible") del encabezado.

= 1.0.2 =
* Corrige la coincidencia exacta: ya no se recortan espacios, tildes, comillas ni HTML del texto original/traducido al guardar.

= 1.0.1 =
* Ajuste del texto descriptivo del encabezado del backend.
* Sin cambios funcionales.

= 1.0 =
* Primera versión estable.
* Interfaz moderna para traducciones exactas.
* Traducción de contenido estático y dinámico en frontend.
* Sistema de actualización privada mediante update.json y ZIP remoto.
