=== Contexta Press ===
Contributors: DonWizu - Juanma Lluesma
Tags: ai, seo, content generation, woocommerce, blog
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.6.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Genera artículos con IA usando estilos de escritura configurables, sincronizados con tu catálogo de WooCommerce.

== Description ==

Contexta Press conecta tu WordPress con un backend externo de generación de contenido mediante IA. Permite:

* Generar artículos a partir de keywords y estilos de escritura reutilizables.
* Sugerir ideas de artículos con enfoque SEO.
* Sincronizar el catálogo de productos de WooCommerce y los posts existentes con el backend.
* Personalizar el diseño visual de los artículos generados.

Este plugin requiere una cuenta activa en el servicio Contexta Press (contextapress.com) y una API Key válida para funcionar. Consulta la sección "Servicios externos" para más información sobre los datos que se envían.

== Installation ==

1. Sube la carpeta del plugin a `/wp-content/plugins/`.
2. Activa el plugin desde el menú "Plugins" de WordPress. Al activarse, intenta conectar tu cuenta automáticamente usando el email del administrador del sitio.
3. Si la conexión automática no se completó, ve a "Contexta Press > Ajustes" y usa "Conectar cuenta" (introduciendo tu email) o pega manualmente una API Key que ya tuvieras.

== Frequently Asked Questions ==

= ¿Necesito una cuenta externa para usar este plugin? =

Sí. Contexta Press es un cliente para el backend de generación de contenido con IA de Contexta Press (https://www.contextapress.com). Necesitas una API Key válida, obtenida en esa plataforma, para generar artículos, sugerir ideas o sincronizar tu catálogo.

= ¿Qué pasa con mis datos? =

Consulta la sección "Servicios externos" de este readme y la política de privacidad del servicio en https://www.contextapress.com/privacidad.

== External services ==

Este plugin actúa como cliente del backend de Contexta Press (https://api.contextapress.com), un servicio de generación de contenido mediante IA operado por Contexta Press. Es necesario para el funcionamiento del plugin y requiere una API Key asociada a tu cuenta.

Se envían datos a este servicio en los siguientes casos:

* **Alta de cuenta** (al activar el plugin por primera vez, y/o al pulsar "Conectar cuenta" en Ajustes): se envía el email del administrador del sitio y la URL del sitio (`site_url`) para crear la cuenta y obtener una API Key. No requiere que haya ninguna API Key configurada previamente.
* **Generación de artículos e ideas** (acción manual del administrador desde el panel "Contexta Press"): se envían las keywords/tema introducidas, el prompt del estilo de escritura seleccionado y, si se activa la opción "Incluir productos", una referencia al catálogo.
* **Extracción de contexto de negocio** (acción manual): el texto de contexto de empresa que el administrador guarda se envía como contexto global para las peticiones de generación.
* **Sincronización automática al guardar contenido**: cada vez que se crea o actualiza un producto de WooCommerce o una entrada (post) del blog, el plugin envía en segundo plano al backend su título/nombre, descripción/extracto, precio y stock (en productos), y el HTML renderizado del contenido (en posts), para mantener el índice del backend actualizado. Esto ocurre automáticamente mientras la URL del backend y la API Key estén configuradas en los ajustes del plugin.
* **Sincronización masiva** (acción manual, botón "Sincronizar Catálogo" en Ajustes): envía en lotes de 50 el catálogo completo de productos y posts (mismos campos que arriba, más la imagen principal del producto).
* **Consulta de uso/facturación** (acción manual): se solicita al backend el resumen de artículos y tokens consumidos en el mes.
* **Sincronización del sitemap**: una vez al día (automático), y además cada vez que un post, página o producto pasa a publicado, el plugin envía la lista completa de URLs públicas e indexables del sitio (título, URL y tipo de cada una), sustituyendo por completo la lista anterior en el backend. Se excluyen borradores, contenido con contraseña y cualquier entrada marcada noindex por Yoast SEO o Rank Math.

No se envían datos a este servicio hasta que el administrador configura una URL de backend y una API Key válidas en Contexta Press > Ajustes.

Enlaces:
* Sitio del servicio: https://www.contextapress.com
* Términos de servicio: https://www.contextapress.com/terminos
* Política de privacidad: https://www.contextapress.com/privacidad

Este plugin también contacta periódicamente con la API de GitHub (api.github.com) para comprobar si hay una versión nueva publicada en https://github.com/DonWizu/contexta-plugin/releases, usando la librería [Plugin Update Checker](https://github.com/YahnisElsts/plugin-update-checker) de YahnisElsts (MIT). El repositorio es privado, así que esta comprobación usa una credencial de solo lectura incluida en el propio plugin (no configurable desde el admin de WordPress). No se envía ningún dato del sitio a GitHub, solo se consulta la lista de releases del repositorio.

== Changelog ==

= 1.6.1 =
* Corregido: CONTEXTA_PRESS_Sync se instanciaba dos veces (una en su propio archivo y otra en contexta-press.php), lo que registraba el handler de sincronización manual por duplicado y procesaba cada página del catálogo dos veces.

= 1.6.0 =
* Nuevo: sincronización de sitemap con el backend (`POST /sitemap/sync`, modo "replace"). La lista de URLs públicas e indexables se construye directamente desde WordPress (posts, páginas, productos y categorías publicados), sin depender de ningún sitemap.xml ni de qué plugin de SEO esté activo. Excluye contenido noindex (Yoast/Rank Math) y con contraseña.
* Se ejecuta una vez al día vía WP-Cron, y además al publicar cualquier post/página/producto (de forma asíncrona, sin alargar el guardado).
* Si la construcción de la lista falla a medias, o queda vacía, no se envía nada — evita que un fallo parcial borre enlaces internos legítimos en el backend.

= 1.5.2 =
* Corregido: la pestaña Ajustes → Contexto del Negocio nunca mostraba el contexto ya guardado al abrirla. El proxy de lectura leía la clave `context` de la respuesta del backend, pero el backend devuelve `company_context`; el campo aparecía siempre vacío aunque hubiera contexto guardado (el guardado en sí funcionaba bien).

= 1.5.1 =
* El acceso de solo lectura al repositorio de GitHub para comprobar actualizaciones ya no se configura desde Ajustes: viene incluido en el propio plugin, sin campo visible ni editable en el admin.

= 1.5.0 =
* Nuevo: comprobación automática de actualizaciones vía Plugin Update Checker (YahnisElsts), apuntando a los Releases de GitHub. Requiere un token de GitHub guardado en Ajustes → Actualizaciones del plugin (el repositorio es privado); sin token, el plugin sigue funcionando igual pero no avisa de nuevas versiones.
* Usa el .zip publicado por release.yml como asset del Release (no el código fuente completo del repo).

= 1.4.0 =
* Nuevo campo opcional "Keywords" en el generador, separado de "Idea del artículo". Al generar, se combinan en un único topic_keywords ("Idea del artículo: ...\nKeywords: ...", omitiendo la línea de Keywords si está vacía) — el request a la API no cambia de forma.
* Al usar una idea de la Lluvia de Ideas SEO, sus keywords ahora se copian al nuevo campo "Keywords" en vez de mezclarse dentro del texto de la idea.

= 1.3.2 =
* El seo_title y meta_description que devuelve la IA se recortan a los límites recomendados por Yoast SEO y Rank Math (60 / 156 caracteres, respetando palabras completas) antes de guardarlos en rank_math_title, rank_math_description, _yoast_wpseo_title y _yoast_wpseo_metadesc.

= 1.3.1 =
* El plan de suscripción ahora se muestra como una insignia a la izquierda de posts y tokens consumidos en el resumen de uso.
* Nuevo enlace "Mejorar plan" en el resumen de uso (oculto en el plan Agency, el más alto).

= 1.3.0 =
* Nuevo: "Incluir productos" queda bloqueado en el generador para planes free y starter; solo Growth y Agency pueden activarlo.
* El resumen de uso ahora muestra el plan, posts y tokens consumidos sobre su límite, y el fin del periodo actual (o "Aún no has generado contenido" si el cliente es nuevo).
* El botón "Generar Artículo" se deshabilita proactivamente cuando se agota la cuota de posts o de tokens (lo que ocurra antes), en vez de esperar al 402 tras rellenar el formulario.
* Corregido: el resumen de uso leía `tokens_used`, un campo que la API nunca ha devuelto (es `tokens_consumed`); por eso siempre mostraba 0.
* Si la API Key deja de ser válida (403/404 en `/billing/status`), se muestra un aviso con enlace directo para reconectar la cuenta desde Ajustes.

= 1.2.4 =
* Al usar una idea de la Lluvia de Ideas SEO para generar un artículo, el "Ángulo diferencial" ahora se copia también al campo de tema del generador (antes solo se copiaban título, idea y keywords).

= 1.2.3 =
* Corregido: al generar un artículo sin "Incluir productos" marcado (el estado por defecto), el plugin enviaba `num_references: 0` a la API, lo que provocaba un 422 de validación del backend antes de que la petición llegara a registrarse en su log. Ahora siempre se envía un valor entre 1 y 10.
* Los mensajes de error de generación ya no anteponen "Error al conectar con la API" cuando la API sí respondió (por ejemplo, cuota agotada o contenido rechazado) — ese prefijo queda reservado para fallos de conexión reales.

= 1.2.2 =
* Añadido un footer con enlace a https://www.contextapress.com/ en las páginas de administración del plugin.

= 1.2.0 =
* Nuevo: alta de cuenta self-service ("Conectar cuenta") mediante email + URL del sitio, con intento automático al activar el plugin.
* Mensajes de error específicos al generar artículos e ideas (cuota agotada, contenido rechazado, contexto de negocio pendiente, etc.), en vez de un error genérico.
* Nuevo: se muestra el "ángulo diferencial" de cada idea sugerida por la IA.
* Corregido: el webhook de borrado de producto enviaba el ID como número en vez de como texto, inconsistente con el resto de llamadas al backend.

= 1.1.2 =
* Corregido el desajuste entre la clase CSS del contenedor de artículos generados y la que usaba "Modificar estilos", que hacía que la personalización de diseño no tuviera efecto.
* Migración automática, transparente para el usuario, de la meta key de posts generados por IA a su nuevo nombre.
* Corrección de más caracteres mal codificados en el panel "Modificar estilos".

= 1.1.1 =
* Corrección de caracteres mal codificados en textos del panel de administración.
* La URL del backend ahora debe usar HTTPS para proteger la API Key en tránsito.
* Documentación del servicio externo utilizado por el plugin.

= 1.0.13 =
* Versión previa.
