Servicios de Terceros
Además de las APIs de WordPress.org, WordPress 6.9 se comunica o puede comunicarse con diversos servicios de terceros, dependiendo de la configuración y uso. Este documento los detalla exhaustivamente.
Browse Happy (Actualización de Navegadores)
Sitio Web
https://browsehappy.com/
Propósito
Proporcionar información y enlaces para actualizar navegadores desactualizados o inseguros.
Cuándo se Accede
- El dashboard muestra un widget “Browser Update” si detecta navegador antiguo
- Enlace directo desde widget de advertencia
Archivo Fuente
wp-admin/includes/dashboard.php línea 1744
Código
$browsehappy = 'https://browsehappy.com/';
$locale = get_user_locale();
if ( 'en_US' !== $locale ) {
$browsehappy = add_query_arg( 'locale', $locale, $browsehappy );
}
URL Generada
https://browsehappy.com/?locale=es_ES
Datos Enviados
- Query parameter:
locale(idioma del usuario) - Referrer: URL del dashboard de WordPress
- User-Agent: Del navegador del administrador
- IP: Del navegador del administrador
Tipo de Conexión
- Directa desde el navegador del usuario (no proxied por el servidor)
- Click en enlace HTML
Privacidad
- Riesgo: MEDIO
- browsehappy.com (operado por WordPress Foundation) recibirá:
- IP del administrador
- User-Agent completo
- Sitio de origen (Referer)
GDPR
- browsehappy.com tiene su propia política de privacidad
- Datos enviados: IP y User-Agent son datos personales
Desactivación
// wp-config.php
// Desactivar widget de browser check
remove_action( 'admin_notices', 'wp_check_browser_version' );
WordPress News Feed (Noticias de la Comunidad)
Sitio Web
https://wordpress.org/news/
https://wordpress.org/news/feed/
Propósito
Widget del dashboard que muestra noticias del blog oficial de WordPress.
Cuándo se Accede
- Automático: Al cargar el dashboard
- Frecuencia: Cada 12 horas (caché)
Archivo Fuente
wp-admin/includes/dashboard.php líneas 1527-1613
Código
function wp_dashboard_primary() {
$feeds = array(
'news' => array(
'link' => apply_filters( 'dashboard_primary_link', __( 'https://wordpress.org/news/' ) ),
'url' => apply_filters( 'dashboard_primary_feed', __( 'https://wordpress.org/news/feed/' ) ),
'title' => apply_filters( 'dashboard_primary_title', __( 'WordPress Blog' ) ),
'items' => 2,
'show_summary' => 0,
'show_author' => 0,
'show_date' => 0,
),
);
wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_primary_output', $feeds );
}
URLs Accedidas
https://wordpress.org/news/feed/
Datos Enviados
- User-Agent:
WordPress/6.9; https://example.com/ - Referer: Ninguno (petición del servidor)
Tipo de Conexión
- Proxied por el servidor WordPress
wp_remote_get()desde el servidor
Formato
RSS/XML feed
Caché
- Duración: 12 horas
- Transient:
feed_[md5_hash]
Privacidad
- Riesgo: BAJO
- La IP es del servidor, no del usuario final
- No se envían datos personales del administrador
- WordPress.org puede saber:
- URL del sitio (User-Agent)
- Versión de WordPress
Localización
Si el idioma no es inglés, puede intentar acceder:
https://es.wordpress.org/news/feed/
Filtro aplicable:
// Cambiar URL del feed
add_filter( 'dashboard_primary_feed', function() {
return 'https://mi-blog.com/feed/';
});
Desactivación
// wp-config.php o functions.php
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );
PHP Update Information
Sitio Web
https://wordpress.org/support/update-php/
Propósito
Enlace informativo cuando WordPress detecta una versión antigua de PHP.
Cuándo se Muestra
- Si la versión de PHP es menor que la recomendada
- En admin notices y Site Health
Archivo Fuente
wp-includes/functions.php línea 8512
Código
function wp_get_default_update_php_url() {
return _x( 'https://wordpress.org/support/update-php/', 'localized PHP upgrade information page' );
}
Variable de Entorno
// Puede ser sobrescrita con:
getenv( 'WP_UPDATE_PHP_URL' )
Tipo de Conexión
- Enlace directo desde el navegador del administrador
- No es una petición automática
Privacidad
- Riesgo: BAJO
- Solo si el administrador hace click
- wordpress.org verá IP y User-Agent del administrador
Personalización
// wp-config.php
putenv( 'WP_UPDATE_PHP_URL=https://mi-host.com/actualizar-php/' );
Servicios de Ping (XML-RPC)
Servicio Principal: Ping-O-Matic
URL por defecto:
http://rpc.pingomatic.com/
Propósito
Notificar a servicios de búsqueda y agregadores cuando se publica contenido nuevo.
Cuándo se Envía
- Automático: Al publicar o actualizar un post
- Solo si está habilitado en Ajustes > Escritura
Archivo Fuente
wp-includes/comment.php líneas 3148-3364
Funciones Clave
function generic_ping( $post_id = 0 ) // línea 3148
function weblog_ping( $server = '', $path = '' ) // línea 3349
Protocolo
XML-RPC (Remote Procedure Call)
Método XML-RPC
weblogUpdates.extendedPing
weblogUpdates.ping (fallback)
Datos Enviados
// Parámetros del ping
$client->query(
'weblogUpdates.extendedPing',
get_option( 'blogname' ), // Nombre del blog
home_url(), // URL del blog
get_bloginfo( 'rss2_url' ) // URL del feed RSS
);
// Si falla, intenta ping simple
$client->query(
'weblogUpdates.ping',
get_option( 'blogname' ),
home_url()
);
Código Completo
// wp-includes/comment.php:3354-3363
$client = new WP_HTTP_IXR_Client( $server, $path );
$client->timeout = 3;
$client->useragent .= ' -- WordPress/' . get_bloginfo( 'version' );
$home = trailingslashit( home_url() );
if ( ! $client->query( 'weblogUpdates.extendedPing',
get_option( 'blogname' ),
$home,
get_bloginfo( 'rss2_url' ) ) ) {
// Fallback a ping simple
$client->query( 'weblogUpdates.ping', get_option( 'blogname' ), $home );
}
Servicios Configurables
Ubicación: Ajustes > Escritura > “Servicios de actualización”
Por defecto: Ping-O-Matic está preconfigurado
http://rpc.pingomatic.com/
Otros servicios populares:
http://rpc.technorati.com/rpc/ping
http://blogsearch.google.com/ping/RPC2
http://ping.feedburner.com/
http://blog.goo.ne.jp/XMLRPC
Privacidad
- Riesgo: MEDIO-ALTO
- Datos públicos enviados:
- Nombre del blog
- URL completa del blog
- URL del RSS feed
- IP: Del servidor WordPress
- Propósito: Indexación pública del contenido
Implicaciones
- Intencional: El objetivo es notificar públicamente
- SEO: Mejora la indexación en buscadores
- Privacidad: No envía datos personales, pero hace pública la existencia del contenido
Desactivación
Método 1: Desde la interfaz
- Ajustes > Escritura > Servicios de actualización
- Borrar todas las URLs
Método 2: Programático
// wp-config.php o functions.php
update_option( 'ping_sites', '' ); // Vaciar lista de servicios
Método 3: Desactivar XML-RPC completamente
// wp-config.php
add_filter( 'xmlrpc_enabled', '__return_false' );
Pingback (XML-RPC)
Propósito
Notificar a otros sitios cuando WordPress enlaza a su contenido.
Cuándo se Envía
- Automático: Al publicar/actualizar un post con enlaces externos
- Solo si el sitio destino soporta pingbacks
Archivo Fuente
wp-includes/comment.php línea 3173
Función
function pingback( $content, $post )
Protocolo
XML-RPC a URL encontrada en la meta <link rel="pingback">
Flujo
- WordPress extrae URLs del contenido del post
- Para cada URL, hace petición HTTP para buscar
<link rel="pingback"> - Si existe, envía pingback XML-RPC a esa URL
Datos Enviados
sourceURI: URL de tu post
targetURI: URL del post enlazado
Timeout
// wp-includes/class-wp-http-ixr-client.php
$client->timeout = 3; // 3 segundos
Privacidad
- Riesgo: BAJO-MEDIO
- Los sitios enlazados recibirán:
- URL de tu post
- IP del servidor
- Notificación de que los enlazaste
Desactivación
Opción 1: Global (ajustes)
- Ajustes > Comentarios > Desmarcar “Permitir notificaciones de enlaces…”
Opción 2: Por post
- Editor de post > Pantallas de opciones > Discusión > Desmarcar pingbacks
Opción 3: Programático
// Deshabilitar pingbacks salientes
remove_action( 'do_pings', 'do_all_pings', 10 );
// Deshabilitar pingbacks entrantes
add_filter( 'xmlrpc_methods', function( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
});
oEmbed (Incrustación de Contenido Externo)
Propósito
Incrustar contenido de servicios externos (videos, tweets, etc.) automáticamente al pegar URLs.
Servicios Soportados (Lista Parcial)
Servicios de Video
- YouTube:
https://www.youtube.com/oembed - Vimeo:
https://vimeo.com/api/oembed.{format} - Dailymotion:
https://www.dailymotion.com/services/oembed - VideoPress:
https://public-api.wordpress.com/oembed/?for={host} - TikTok:
https://www.tiktok.com/oembed
Redes Sociales
- Twitter:
https://publish.twitter.com/oembed - Reddit:
https://www.reddit.com/oembed - Bluesky:
https://embed.bsky.app/oembed
Audio
- Spotify:
https://embed.spotify.com/oembed/ - SoundCloud:
https://soundcloud.com/oembed - Mixcloud:
https://app.mixcloud.com/oembed/
Otros
- Flickr:
https://www.flickr.com/services/oembed/ - Instagram (Meta):
https://graph.facebook.com/v10.0/instagram_oembed - WordPress.tv:
https://wordpress.tv/oembed/ - Scribd:
https://www.scribd.com/services/oembed - Imgur:
https://api.imgur.com/oembed - Pinterest:
https://www.pinterest.com/oembed.json - Amazon:
https://read.amazon.com/kp/api/oembed - TED:
https://www.ted.com/services/v1/oembed.{format} - Kickstarter:
https://www.kickstarter.com/services/oembed - Tumblr:
https://www.tumblr.com/oembed/1.0 - Animoto:
https://animoto.com/oembeds/create - Crowdsignal:
https://api.crowdsignal.com/oembed - ReverbNation:
https://www.reverbnation.com/oembed - Speaker Deck:
https://speakerdeck.com/oembed.{format} - Issuu:
https://issuu.com/oembed_wp - Cloudup:
https://cloudup.com/oembed - Anghami:
https://api.anghami.com/rest/v1/oembed.view - Pocket Casts:
https://pca.st/oembed.json - Wolfram Cloud:
https://www.wolframcloud.com/oembed - Canva:
https://canva.com/_oembed - SmugMug:
https://api.smugmug.com/services/oembed/
Archivo Fuente
wp-includes/class-wp-oembed.php líneas 41-113
Cuándo se Accede
- Editor de bloques: Al pegar URL de servicio soportado
- Editor clásico: Con URL en línea propia
- Frontend: Al renderizar contenido con oEmbed
Datos Enviados
- URL: La URL del contenido a incrustar
- Parámetros opcionales:
maxwidth: Ancho máximomaxheight: Alto máximoformat: json o xmlfor: (VideoPress) Hostname del sitio
Ejemplo de Petición
GET https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=dQw4w9WgXcQ&format=json&maxwidth=600
Respuesta Típica (JSON)
{
"type": "video",
"version": "1.0",
"title": "Video Title",
"author_name": "Author",
"author_url": "https://...",
"provider_name": "YouTube",
"provider_url": "https://www.youtube.com/",
"thumbnail_url": "https://i.ytimg.com/...",
"thumbnail_width": 480,
"thumbnail_height": 360,
"html": "<iframe width='600' height='338' src='...'></iframe>"
}
Tipo de Conexión
- Servidor WordPress hace la petición (proxied)
- No expone directamente IP del usuario final
- Caché: Las respuestas se almacenan en post meta
Privacidad
- Riesgo: BAJO-MEDIO (servidor) / MEDIO-ALTO (usuario final)
Fase 1: Petición oEmbed (Servidor)
- WordPress server hace petición al servicio oEmbed
- Servicio recibe:
- IP del servidor WordPress
- URL solicitada
- User-Agent del servidor
- No expone datos del usuario final
Fase 2: Carga del Embed (Usuario Final)
- El HTML devuelto incluye
<iframe>o<script> - Se carga DIRECTAMENTE desde el servicio al navegador del usuario
- Servicios externos (YouTube, Twitter, etc.) reciben:
- IP del usuario final
- User-Agent del usuario
- Cookies del servicio (si existen)
- Permite tracking del usuario
GDPR e Implicaciones
- Crítico: Los embeds cargan recursos de terceros
- YouTube, Twitter, etc. pueden hacer tracking de visitantes
- Muchos servicios establecen cookies de tracking
- Consentimiento: Puede requerirse antes de cargar embeds
Soluciones de Privacidad
Opción 1: Desactivar oEmbed
// wp-config.php
remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
Opción 2: Lazy load con consentimiento (requiere plugin o código custom)
- Mostrar placeholder
- Cargar embed solo tras click/consentimiento
Opción 3: Proxy de privacidad
- Usar servicios como
youtube-nocookie.com - Bloquear tracking con configuraciones especiales
Opción 4: Embeds responsables
// Forzar YouTube a modo sin cookies
add_filter( 'oembed_result', function( $html ) {
return str_replace( 'youtube.com/', 'youtube-nocookie.com/', $html );
}, 10, 1 );
oEmbed Discovery
WordPress también soporta “oEmbed discovery” para sitios no listados:
- Busca
<link rel="alternate" type="application/json+oembed"> - Si existe, hace petición a ese endpoint
Desactivación de oEmbed Discovery
// wp-config.php
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
Gravatar (Avatares de Usuario)
Servicio
https://secure.gravatar.com/avatar/
https://gravatar.com/avatar/
Propósito
Mostrar avatares de usuarios en comentarios y perfiles.
Cuándo se Carga
- Página de comentarios
- Área de administración (perfil, autores)
- Widgets de autores
Archivo Fuente
wp-includes/pluggable.php – Función get_avatar()
URL Generada
https://secure.gravatar.com/avatar/[MD5_EMAIL]?s=96&d=mm&r=g
Parámetros:
s: Tamaño (size)d: Default (mm=mystery man, identicon, monsterid, etc.)r: Rating (g, pg, r, x)
Datos Enviados
- MD5 del email: Hash del email del usuario (NO el email en texto plano)
- Referer: URL de la página que muestra el avatar
- IP del visitante: (si carga desde navegador)
Tipo de Conexión
- Directa desde navegador del visitante
- Tag
<img src="https://secure.gravatar.com/...">
Privacidad
- Riesgo: MEDIO-ALTO
- Gravatar (Automattic) recibe:
- Hash MD5 del email (reversible con rainbow tables)
- IP de cada visitante que ve la página
- URL del sitio (Referer)
- Permite tracking de visitantes
GDPR
- Hash MD5 del email es considerado dato personal si es reversible
- IPs de visitantes son definitivamente datos personales
- Puede requerirse consentimiento
Desactivación
Opción 1: Usar avatares locales
- Ajustes > Comentarios > Avatares > Avatar por defecto: “Blank”
Opción 2: Desactivar Gravatar completamente
// wp-config.php o functions.php
add_filter( 'get_avatar', function( $avatar, $id_or_email ) {
return ''; // No mostrar avatares
}, 1, 2 );
// O deshabilitar Gravatar pero mantener avatares locales
update_option( 'show_avatars', 0 );
Opción 3: Plugin de avatares locales
- “Simple Local Avatars”
- “WP User Avatar”
Google Fonts (Temas de WordPress)
Nota Importante
WordPress core NO carga Google Fonts, pero muchos temas sí lo hacen.
Ubicación Típica
https://fonts.googleapis.com/css?family=Roboto:400,700
https://fonts.gstatic.com/s/roboto/v30/...
Cuándo se Carga
- Frontend del sitio
- Cada página vista
Privacidad
- Riesgo: ALTO
- Google recibe IP de cada visitante
- Controversia legal en Europa (sentencias alemanas)
- GDPR: Transmisión de IP a Google sin consentimiento es problemática
Verificación
# Buscar en tema activo
grep -r "fonts.googleapis.com" wp-content/themes/
Soluciones
Opción 1: Hospedar fuentes localmente
- Plugin: “OMGF” (Optimize My Google Fonts)
- Plugin: “Local Google Fonts”
Opción 2: Desactivar en el tema (vía functions.php)
// Ejemplo para Twenty Twenty-One
add_action( 'wp_enqueue_scripts', function() {
wp_dequeue_style( 'twenty-twenty-one-google-fonts' );
}, 100 );
CDNs Externas (jQuery, etc.)
WordPress Core
Buenas noticias: WordPress NO usa CDNs externas por defecto.
- jQuery está incluido localmente en
wp-includes/js/jquery/ - Todas las librerías JS/CSS están auto-hospedadas
Plugins y Temas
Atención: Plugins y temas pueden cargar desde CDNs:
- cdnjs.cloudflare.com
- cdn.jsdelivr.net
- code.jquery.com
- maxcdn.bootstrapcdn.com
Verificación
# Buscar CDNs en plugins
grep -r "cdn\." wp-content/plugins/
# Buscar en tema
grep -r "cdn\." wp-content/themes/
Privacidad
- Riesgo: Variable según CDN
- CDNs reciben IP de cada visitante
- Potencial tracking
Akismet (Antispam)
Servicio
https://akismet.com/
Propósito
Filtrado de spam en comentarios.
Plugin
wp-content/plugins/akismet/ (incluido por defecto, pero requiere activación)
Cuándo se Activa
- Solo si el plugin Akismet está activado Y configurado con API key
- No activo por defecto en instalación fresca
Datos Enviados (si está activo)
- Contenido del comentario
- Email del comentarista
- IP del comentarista
- User-Agent
- URL del sitio
- Fecha/hora
Privacidad
- Riesgo: ALTO (si está activo)
- Automattic (Akismet) recibe datos personales de comentaristas
- Requiere política de privacidad y potencialmente consentimiento GDPR
Estado por Defecto
- Plugin incluido: Sí
- Plugin activado: NO (requiere activación manual)
- Configurado: NO (requiere API key de Akismet.com)
No es una llamada externa por defecto en WordPress “out of the box”.
Resumen de Servicios Terceros
| Servicio | Activo por Defecto | Tipo de Conexión | Datos Personales | Riesgo GDPR |
|---|---|---|---|---|
| browsehappy.com | Sí (condicional) | Navegador usuario | IP, User-Agent | Medio |
| wordpress.org/news | Sí | Servidor proxy | URL sitio | Bajo |
| wordpress.org/support | No (solo enlace) | Navegador usuario | IP (si click) | Bajo |
| Ping-O-Matic | Sí (si configurado) | Servidor | Datos públicos | Bajo |
| Pingback | Sí (si habilitado) | Servidor | URL post | Bajo |
| oEmbed APIs | Sí (al usar) | Servidor + Usuario | IP usuario final | Alto |
| Gravatar | Sí | Navegador visitante | MD5 email, IP | Alto |
| Google Fonts | No (depende tema) | Navegador visitante | IP | Alto |
| CDNs | No (depende plugins) | Navegador visitante | IP | Medio |
| Akismet | No (desactivado) | Servidor | Datos comentarios | Alto |
Conclusiones
Servicios con Mayor Riesgo de Privacidad
- Gravatar – IP de visitantes, tracking
- oEmbed (YouTube, etc.) – Tracking de visitantes por terceros
- Google Fonts (temas) – IP de visitantes a Google
- Browse Happy – IP y User-Agent de administradores
Recomendaciones
- Auditar tema activo: Verificar Google Fonts y CDNs
- Considerar desactivar Gravatar: O usar avatares locales
- Revisar oEmbed: Implementar lazy load o consentimiento
- Documentar en política de privacidad: Todos los servicios activos
- Configurar XML-RPC: Desactivar si no se usa
- Revisar plugins: Pueden agregar servicios externos adicionales

Deja una respuesta