=== Hosting Local cURL Fix ===
Contributors: linea
Tags: curl, loopback, localhost, hosting, fix
Requires at least: 5.0
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: 6.15.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Forzado estricto de cURL hacia 127.0.0.1 (Loopback) para resolver problemas de conectividad interna en servidores de hosting compartido.

== Description ==

**Hosting Local cURL Fix** resuelve un problema común en servidores de hosting compartido donde las peticiones HTTP internas de WordPress (Loopback) son bloqueadas por el firewall porque salen a la red pública en lugar de resolverse localmente.

El plugin intercepta el manejador nativo de cURL y fuerza la resolución DNS del dominio del sitio hacia `127.0.0.1`, garantizando que:

* La **Salud del Sitio** (Site Health) funcione correctamente
* La **API REST** interna responda sin bloqueos
* Las **tareas cron** de WordPress se ejecuten sin problemas
* Las **actualizaciones** y verificaciones internas no fallen

= Características =

* Parche a bajo nivel del manejador cURL nativo
* Soporte de respaldo para transporte HTTP estándar de WordPress
* Panel de diagnóstico en Ajustes → Local cURL Fix
* Test de conexión loopback con tiempo de respuesta
* Zero-config: funciona al activarse, sin configuración necesaria
* White-label: interfaz técnica pero limpia para el cliente
* Override de IP desde wp-config.php con `HLCF_LOOPBACK_IP` o desde el panel (rango 10.100.0.0/16)
* Auto-recuperación secuencial: si la validación de salud de WordPress (REST API y loopback) falla con la IP por defecto 127.0.0.1, el plugin prueba automáticamente las IPs internas del rango 10.100.0.0/16 en orden y aplica la primera que funcione; si falla, avanza a la siguiente. La opción de IP manual solo se habilita cuando todas las IPs automáticas fallan
* Botón "Buscar" en el panel para detectar automáticamente la IP interna del servidor y aplicarla
* Botón manual de "Ejecutar Tareas Pendientes Ahora" con barra de progreso en vivo (AJAX, sin recargar la página), visible solo cuando se detecta un backlog real de WP-Cron / Action Scheduler
* Procesamiento automático nocturno opcional (23:55), desactivado por defecto: se activa con un checkbox en el panel
* Panel con conteo de eventos WP-Cron y acciones de Action Scheduler vencidas, última ejecución manual y próxima revisión automática

== Installation ==

1. Sube la carpeta `hosting_local_curl` al directorio `/wp-content/plugins/`
2. Activa el plugin desde el menú 'Plugins' de WordPress
3. Opcionalmente, ve a Ajustes → Local cURL Fix para verificar el estado

= Configuración Avanzada =

Para usar una IP diferente a `127.0.0.1` (por ejemplo del segmento interno `10.100.0.0/16`), tienes dos opciones:

1. **Desde el panel**: ve a Ajustes → Local cURL Fix → "Dirección de Bucle de Retorno", escribe la IP y pulsa "Guardar IP", o usa el botón "🔍 Buscar" para que el plugin detecte automáticamente la IP interna del servidor y luego acepta la detectada.
2. **Desde `wp-config.php`**: agrega `define('HLCF_LOOPBACK_IP', '10.100.6.250');`

== Frequently Asked Questions ==

= ¿Necesito configurar algo? =

No. El plugin funciona automáticamente al activarse. Fuerza todas las peticiones internas a resolverse por 127.0.0.1.

= ¿Es seguro desactivar la verificación SSL? =

Sí, porque solo se desactiva para peticiones que van al propio servidor (loopback). El tráfico nunca sale a internet, por lo que no hay riesgo de intercepción.

= ¿Puedo usar una IP diferente a 127.0.0.1? =

Sí. En la mayoría de los casos el plugin lo resuelve solo: si `127.0.0.1` falla la validación de salud, prueba automáticamente las IPs internas del rango `10.100.0.0/16` en orden y usa la primera que funcione. Solo si todas fallan se habilita el campo manual en el panel (escribe una IP del rango `10.100.0.0/16` o usa el botón "Buscar"). También puedes definir `HLCF_LOOPBACK_IP` en tu `wp-config.php`.

= ¿Qué IPs puedo usar? =

`127.0.0.1` (por defecto) o cualquier dirección del segmento interno `10.100.0.0/16`. El plugin valida la IP al guardarla y rechaza valores fuera de ese rango.

= ¿Funciona con Cloudflare u otros CDN/Proxy? =

Sí. El plugin solo afecta las peticiones del servidor hacia sí mismo. No interfiere con el tráfico entrante del CDN.

== Changelog ==

= 6.15.0 =
* Auto-recuperación secuencial del loopback: el plugin usa 127.0.0.1 por defecto y valida internamente la salud de WordPress (petición de loopback a site_url(?loopback=1) y disponibilidad de la API REST, replicando Site Health)
* Si la validación falla con 127.0.0.1, el plugin recorre automáticamente las IPs internas del servidor (rango 10.100.0.0/16) en orden: aplica la primera, y si sigue fallando la salud, avanza a la segunda, y así sucesivamente (un paso por ventana de 5 minutos, solo administradores)
* Si ninguna IP interna funciona, el plugin lo marca como agotado y recién entonces habilita el campo manual en el panel, recomendando el rango 10.100.0.0/16
* Nueva fila "Validación de Salud (WP)" en la tabla de estado del panel y etiqueta de origen de la IP (por defecto / automática / manual)
* Avisos de estado: recorrido en curso, IP aplicada con salud OK, o IPs automáticas agotadas (campo manual habilitado)

= 6.13.0 =
* Reintegrada la configuración de IP de bucle de retorno desde el panel (Ajustes → Local cURL Fix)
* Nueva sección "Dirección de Bucle de Retorno": permite escribir una IP manual del rango 10.100.0.0/16
* Nuevo botón "🔍 Buscar" que detecta automáticamente la IP interna del servidor (SERVER_ADDR, hostname, resolución DNS y candidatos del segmento 10.100.x.x), las prueba contra la API REST y deja que el administrador elija y guarde
* La IP se valida al guardar: solo se admiten 127.0.0.1 o direcciones dentro de 10.100.0.0/16
* El parche cURL, el filtro de respaldo y el test de diagnóstico usan la IP efectiva configurada

= 6.12.0 =
* El botón "Ejecutar Tareas Pendientes Ahora" ahora usa AJAX y muestra una barra de progreso en vivo (tareas procesadas, %, segundos transcurridos)
* El procesamiento se reparte en tandas cortas para poder reflejar avance real en la barra
* Se mantiene el formulario clásico como respaldo si JavaScript está desactivado

= 6.11.0 =
* El procesamiento automático nocturno (23:55) ahora es opcional y está desactivado por defecto
* Nuevo checkbox "Procesar automáticamente la cola pendiente cada noche" en el panel
* El panel muestra "Desactivada" en vez de una fecha cuando la opción está apagada

= 6.10.0 =
* Reemplazado el procesamiento cada 5 minutos por botón manual + red de seguridad diaria (23:55)
* El botón de ejecución solo aparece cuando hay backlog real (umbral configurable, HLCF_TASKS_THRESHOLD)
* Migración automática para sitios que ya estaban en 6.9.0 (reprograma el evento a diario sin reactivar el plugin)

= 6.9.0 =
* Añadido vigía interno de tareas pendientes (evento recurrente cada 5 minutos, independiente del tráfico)
* El vigía dispara wp-cron.php y procesa la cola de Action Scheduler si está presente
* Nueva sección de panel "Tareas Pendientes" con conteos y botón de ejecución manual
* Hooks de activación/desactivación para (des)programar el vigía correctamente

= 6.8.0 =
* Añadida constante HLCF_VERSION accesible en código
* Añadida constante HLCF_LOOPBACK_IP configurable desde wp-config.php
* Mejorada sanitización de salida HTML con esc_html()
* Diagnóstico mejorado: muestra tiempo de respuesta e IP resuelta
* Añadido link de acceso rápido "Estado" en la lista de plugins
* Añadido hook de desinstalación para limpiar datos legacy
* Nonce con nombre único (_hlcf_nonce) para evitar colisiones
* Cache estático del dominio para evitar llamadas repetidas a site_url()
* Mostrar versión del plugin en pie de página de admin
* Mejorada documentación inline PHPDoc

= 6.7.0 =
* Simplificación total: forzado estricto a 127.0.0.1
* Eliminada detección dinámica de IPs y modo manual
* Removida Settings API (sin opciones guardadas)
* UI simplificada: solo estado y botón de test
* Reducido de 317 a 171 líneas

= 6.6.0 =
* Detección dinámica de IPs del rango de red interna
* Modo auto y manual con Settings API
* Test extendido multi-IP con priorización de rangos internos
* Interfaz de administración completa con configuración
