Telemetría de WordPress

·

APIs de WordPress.org

WordPress.org proporciona múltiples APIs que el núcleo de WordPress consulta para diversas funcionalidades. Todas estas APIs están alojadas en api.wordpress.org y soportan tanto HTTP como HTTPS (con preferencia por HTTPS cuando está disponible).

Core Version Check API

Endpoint

https://api.wordpress.org/core/version-check/1.7/

Archivo Fuente

wp-includes/update.php – Función wp_version_check() (línea 226)

Método

POST

Frecuencia

  • Automática: Cada 12 horas vía WP-Cron
  • Manual: Al visitar Dashboard > Actualizaciones

Parámetros Query String (GET)

- version           // Versión de WordPress (ej: '6.9')
- php               // Versión de PHP (ej: '8.3.0')
- locale            // Idioma del sitio (ej: 'es_ES')
- mysql             // Versión de MySQL/MariaDB
- local_package     // Paquete local si existe
- blogs             // Número de sitios (multisite)
- users             // Número de usuarios
- multisite_enabled // 0 o 1
- initial_db_version // Versión DB inicial
- myisam_tables     // Array de tablas MyISAM
- extensions        // Array de extensiones PHP y versiones
- platform_flags    // OS y arquitectura (32/64 bits)
- image_support     // Soporte GD/Imagick para WebP, AVIF, HEIC, JXL
- channel           // 'beta', 'rc', 'development' (si está configurado)

Cuerpo POST (Body)

- translations // JSON con traducciones instaladas
- [extra_stats] // Estadísticas adicionales opcionales

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/
wp_install: https://example.com/
wp_blog: https://example.com/

Respuesta

JSON con información de actualizaciones disponibles:

{
  "offers": [
    {
      "response": "upgrade|development",
      "download": "https://downloads.wordpress.org/release/...",
      "packages": {
        "full": "URL",
        "no_content": "URL",
        "new_bundled": "URL",
        "partial": "URL",
        "rollback": "URL"
      },
      "current": "6.9",
      "version": "6.9.1",
      "php_version": "7.2.24",
      "mysql_version": "5.5.5",
      "locale": "es_ES"
    }
  ],
  "translations": []
}

Implicaciones de Privacidad

  • Alta exposición técnica: Revela toda la configuración del servidor
  • Extensiones PHP: Lista completa expone posibles vulnerabilidades
  • Tablas MyISAM: Información sobre estructura de base de datos
  • URL del sitio: Enviada en headers y User-Agent

Plugin Update Check API

Endpoint

https://api.wordpress.org/plugins/update-check/1.1/

Archivo Fuente

wp-includes/update.php – Función wp_update_plugins() (línea 464)

Método

POST

Frecuencia

  • Automática: Cada 12 horas vía WP-Cron
  • Manual: Al visitar Plugins > Plugins instalados

Cuerpo POST (Body)

- plugins      // JSON con todos los plugins (slug, version, metadata)
- translations // JSON con traducciones instaladas
- locale       // JSON con locales activos
- all          // JSON: true (solicitar todos los plugins)
- update_stats // JSON con estadísticas adicionales (opcional)

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/

Ejemplo de Datos Enviados

{
  "akismet/akismet.php": {
    "Name": "Akismet Anti-spam",
    "PluginURI": "https://akismet.com/",
    "Version": "5.3",
    "Description": "...",
    "Author": "Automattic",
    "AuthorURI": "https://automattic.com/",
    "TextDomain": "akismet",
    "DomainPath": "",
    "Network": false,
    "RequiresWP": "5.8",
    "RequiresPHP": "5.6.20",
    "UpdateURI": "",
    "Title": "Akismet Anti-spam",
    "AuthorName": "Automattic"
  }
}

Respuesta

JSON con actualizaciones, traducciones y plugins sin actualización:

{
  "plugins": {
    "plugin-slug/plugin.php": {
      "id": "...",
      "slug": "plugin-slug",
      "plugin": "plugin-slug/plugin.php",
      "new_version": "2.0",
      "url": "https://wordpress.org/plugins/plugin-slug/",
      "package": "https://downloads.wordpress.org/plugin/...",
      "icons": {},
      "banners": {},
      "tested": "6.9",
      "requires_php": "7.4"
    }
  },
  "translations": [],
  "no_update": {}
}

Implicaciones de Privacidad

  • Inventario completo de plugins: Revela toda la pila de software
  • Identificación de vulnerabilidades: Los plugins desactualizados son objetivos conocidos
  • Huella digital única: Combinación de plugins puede identificar el sitio
  • Metadata sensible: Versiones exactas facilitan exploits dirigidos

Soporte para Update URI

Los plugins pueden especificar un Update URI personalizado en sus headers, permitiendo actualizaciones desde repositorios propios en lugar de WordPress.org. Se aplica el filtro update_plugins_{$hostname}.

Theme Update Check API

Endpoint

https://api.wordpress.org/themes/update-check/1.1/

Archivo Fuente

wp-includes/update.php – Función wp_update_themes() (línea 750)

Método

POST

Frecuencia

  • Automática: Cada 12 horas vía WP-Cron
  • Manual: Al visitar Apariencia > Temas

Cuerpo POST (Body)

- themes       // JSON con todos los temas (slug, version, metadata)
- translations // JSON con traducciones instaladas
- locale       // JSON con locales activos
- update_stats // JSON con estadísticas adicionales (opcional)

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/

Ejemplo de Datos Enviados

{
  "twentytwentyfive": {
    "Name": "Twenty Twenty-Five",
    "ThemeURI": "https://wordpress.org/themes/twentytwentyfive/",
    "Description": "...",
    "Author": "the WordPress team",
    "AuthorURI": "https://wordpress.org/",
    "Version": "1.0",
    "Template": "",
    "Status": "publish",
    "Tags": "...",
    "TextDomain": "twentytwentyfive",
    "DomainPath": "",
    "RequiresWP": "6.7",
    "RequiresPHP": "7.2.24",
    "UpdateURI": "",
    "Title": "Twenty Twenty-Five",
    "AuthorName": "the WordPress team"
  }
}

Respuesta

Similar a plugins: themestranslationsno_update

Implicaciones de Privacidad

  • Identificación del tema activo: Puede revelar propósito del sitio
  • Temas inactivos: Expone temas no utilizados (posibles vulnerabilidades)
  • Tema hijo: Revela si se usa personalización

Soporte para Update URI

Al igual que los plugins, los temas pueden usar Update URI personalizado. Filtro: update_themes_{$hostname}.

Core Checksums API

Endpoint

https://api.wordpress.org/core/checksums/1.0/

Archivo Fuente

wp-admin/includes/update.php – Función get_core_checksums() (línea 132)

Método

GET

Parámetros Query String

- version  // Versión de WordPress (ej: '6.9')
- locale   // Idioma (ej: 'es_ES')

Uso

Verificar integridad de archivos del núcleo de WordPress detectando modificaciones no autorizadas.

Respuesta

{
  "checksums": {
    "wp-admin/index.php": "abc123...",
    "wp-includes/version.php": "def456...",
    ...
  }
}

Implicaciones de Privacidad

  • Mínimas: Solo envía versión e idioma
  • No expone datos sensibles

Community Events API

Endpoint

https://api.wordpress.org/events/1.0/

Archivo Fuente

wp-admin/includes/class-wp-community-events.php – Función get_events() (línea 101)

Método

GET

Frecuencia

  • Manual: Al visitar el Dashboard (widget “Eventos de WordPress”)
  • Bajo demanda: Al buscar eventos por ubicación

Parámetros Query String

- locale      // Idioma del usuario
- timezone    // Zona horaria del usuario
- ip          // IP anonimizada del usuario (últimos octetos a 0)
- lat         // Latitud (si se proporciona ubicación)
- lon         // Longitud (si se proporciona ubicación)
- location_search // Búsqueda de ciudad (opcional)

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/

Respuesta

{
  "location": {
    "description": "Madrid, Spain",
    "latitude": "40.4168",
    "longitude": "-3.7038",
    "country": "ES"
  },
  "events": [
    {
      "type": "meetup",
      "title": "WordPress Madrid Meetup",
      "url": "https://...",
      "meetup": "...",
      "meetup_url": "...",
      "date": "2026-02-15 19:00:00",
      "end_date": "2026-02-15 21:00:00",
      "location": {
        "location": "Madrid",
        "country": "ES",
        "latitude": 40.4168,
        "longitude": -3.7038
      }
    }
  ],
  "ttl": 3600
}

Implicaciones de Privacidad

  • IP anonimizada: Los últimos octetos se reemplazan con 0
  • Geolocalización opcional: El usuario puede proporcionar ubicación manualmente
  • Proxy del servidor: La petición la hace el servidor, no el navegador del usuario
  • Caché compartida: Los resultados se almacenan en caché para todos los usuarios del sitio

Privacidad por diseño: WordPress implementa medidas para minimizar la exposición de datos del usuario.

Translations API

Endpoint

https://api.wordpress.org/translations/{type}/1.0/

Donde {type} puede ser: corepluginsthemes

Archivo Fuente

wp-admin/includes/translation-install.php – Función translations_api() (línea 53)

Método

POST

Parámetros POST Body

- wp_version  // Versión de WordPress
- locale      // Idioma solicitado
- version     // Versión del core/plugin/theme
- slug        // Slug del plugin/theme (no aplica para core)

Respuesta

{
  "translations": [
    {
      "language": "es_ES",
      "version": "6.9",
      "updated": "2026-01-15 10:30:00",
      "english_name": "Spanish (Spain)",
      "native_name": "Español",
      "package": "https://downloads.wordpress.org/translation/core/6.9/es_ES.zip",
      "iso": ["es"],
      "strings": {
        "continue": "Continuar"
      }
    }
  ]
}

Implicaciones de Privacidad

  • Mínimas: Solo versión, idioma y slug
  • No datos personales

Plugin Information API

Endpoint

https://api.wordpress.org/plugins/info/1.2/

Archivo Fuente

wp-admin/includes/plugin-install.php – Función plugins_api() (línea 149)

Método

GET

Acciones Soportadas

  • query_plugins – Buscar plugins
  • plugin_information – Información de un plugin específico
  • hot_tags – Tags populares

Parámetros Query String

- action   // query_plugins | plugin_information | hot_tags
- request  // Objeto serializado con criterios de búsqueda

Ejemplo de Request (query_plugins)

{
  "page": 1,
  "per_page": 24,
  "search": "contact form",
  "tag": "",
  "author": "",
  "locale": "es_ES",
  "wp_version": "6.9",
  "browse": "popular" // popular | featured | recommended
}

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/

Respuesta (plugin_information)

{
  "name": "Contact Form 7",
  "slug": "contact-form-7",
  "version": "5.9",
  "author": "<a href='...'>Takayuki Miyoshi</a>",
  "author_profile": "https://profiles.wordpress.org/takayukister/",
  "requires": "6.3",
  "tested": "6.9",
  "requires_php": "7.4",
  "rating": 92,
  "ratings": {
    "5": 1200,
    "4": 100,
    "3": 50,
    "2": 20,
    "1": 30
  },
  "num_ratings": 1400,
  "support_threads": 500,
  "support_threads_resolved": 450,
  "active_installs": 5000000,
  "downloaded": 200000000,
  "last_updated": "2026-01-10 08:00:00",
  "added": "2007-08-07",
  "homepage": "https://contactform7.com/",
  "sections": {
    "description": "...",
    "installation": "...",
    "faq": "...",
    "screenshots": "...",
    "changelog": "...",
    "reviews": "..."
  },
  "download_link": "https://downloads.wordpress.org/plugin/contact-form-7.5.9.zip",
  "screenshots": [],
  "tags": {},
  "versions": {},
  "donate_link": "",
  "banners": {},
  "icons": {}
}

Implicaciones de Privacidad

  • Búsquedas del usuario: Revela intenciones/necesidades del administrador
  • URL del sitio: Enviada en User-Agent
  • Versión de WordPress: Puede exponer vulnerabilidades conocidas

Theme Information API

Endpoint

https://api.wordpress.org/themes/info/1.2/

Archivo Fuente

wp-admin/includes/theme.php – Función themes_api() (línea 545)

Método

GET

Funcionamiento

Idéntico a Plugin Information API pero para temas.

Acciones

  • query_themes
  • theme_information
  • feature_list

Browse Happy API

Endpoint

https://api.wordpress.org/core/browse-happy/1.1/

Archivo Fuente

wp-admin/includes/dashboard.php – Función wp_check_browser_version() (línea 1818)

Método

POST

Frecuencia

  • Manual: Al visitar el Dashboard
  • Condicional: Solo si no está en caché

Parámetros POST Body

- useragent  // User-Agent completo del navegador del administrador

Headers Enviados

User-Agent: WordPress/6.9; https://example.com/

Respuesta

{
  "platform": "Windows",
  "name": "Chrome",
  "version": "95.0",
  "current_version": "120.0",
  "upgrade": true,
  "insecure": false,
  "update_url": "https://www.google.com/chrome/",
  "img_src": "https://...",
  "img_src_ssl": "https://..."
}

Implicaciones de Privacidad

  • User-Agent completo: Puede usarse para fingerprinting
  • Identifica al administrador: Versión y tipo de navegador
  • IP del servidor: Aunque la petición la hace el servidor

Nota: El widget también enlaza a https://browsehappy.com/ para más información.

Block Pattern Directory API

Endpoint

https://api.wordpress.org/patterns/1.0/

Archivo Fuente

wp-includes/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php – Función get_items() (línea 117)

Método

GET

Parámetros Query String

- search              // Término de búsqueda
- slug                // Slug específico
- locale              // Idioma
- wp-version          // Versión de WordPress
- pattern-categories  // Categorías
- pattern-keywords    // Palabras clave
- page                // Paginación
- per_page            // Resultados por página

Respuesta

Array de patrones con contenido HTML y metadata.

Implicaciones de Privacidad

  • Proxy de servidor: WordPress actúa como proxy para no exponer IP del usuario final
  • Caché compartida: Resultados cacheados para todos los usuarios del sitio
  • Búsquedas: Revelan intenciones de diseño

Resumen de Datos Enviados a WordPress.org

APIVersión WPPHPMySQLPluginsTemasURL SitioIPUser-Agent
Core Update
Plugin Update
Theme Update
Checksums
Events✓*
Translations
Plugin Info
Theme Info
Browse Happy
Patterns

* IP anonimizada

Configuración de Timeout

APITimeout NormalTimeout WP-Cron
Core Update3 segundos30 segundos
Plugin Update3 + 1s/10 plugins30 segundos
Theme Update3 + 1s/10 temas30 segundos
Translations3 segundosN/A
Plugin Info15 segundosN/A
Community EventsDepende del contextoN/A

Conclusión

Las APIs de WordPress.org son esenciales para el funcionamiento y seguridad del ecosistema WordPress, pero transmiten información técnica significativa sobre el servidor y su configuración. La mayoría de estas comunicaciones pueden ser filtradas o deshabilitadas si es necesario por razones de privacidad o seguridad.

Páginas: 1 2 3 4 5 6

Comments

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *