15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
22.10.2024

Cómo incrustar tweets en WordPress: todos los métodos explicados

Incrustar un tweet en WordPress significa renderizar una publicación de Twitter en vivo e interactiva directamente dentro del contenido de tu página — preservando el formato original, los medios, la atribución del autor y los botones de interacción — sin escribir JavaScript personalizado. WordPress gestiona esto de forma nativa a través de su implementación del protocolo oEmbed, que resuelve automáticamente las URL de Twitter en marcado de incrustación completo en el lado del servidor antes de que la página se entregue al navegador.

Esta guía cubre todos los métodos de incrustación compatibles en profundidad técnica: el editor de bloques Gutenberg, el Editor Clásico, la resolución de URL oEmbed sin procesar, las incrustaciones de línea de tiempo basadas en widget.js de Twitter y los enfoques basados en plugins — incluyendo dónde falla cada método, qué significan los cambios en la política de la API de Twitter para tus incrustaciones en 2024 y cómo mantener el contenido incrustado renderizándose correctamente cuando el servicio externo no está disponible.

Por qué funciona la incrustación de tweets: el protocolo oEmbed

Antes de revisar los métodos individuales, comprender el mecanismo subyacente evita horas de depuración posteriores.

oEmbed es un estándar abierto (definido en oembed.com) que permite resolver una URL de un proveedor compatible en marcado de incrustación enriquecido consultando un endpoint de descubrimiento. WordPress incluye un consumidor oEmbed integrado desde la versión 2.9. Cuando pegas una URL de Twitter en el editor, WordPress llama al endpoint oEmbed de Twitter:

https://publish.twitter.com/oembed?url=<tweet_url>

El servidor de Twitter devuelve un payload JSON que contiene un campo html — un elemento <blockquote> más una etiqueta <script> que carga widgets.js. WordPress almacena en caché esta respuesta en la tabla de metadatos de publicaciones wp_oembed para evitar llamadas redundantes a la API en cada carga de página.

Implicación crítica: Si el endpoint oEmbed de Twitter no está disponible, tiene limitación de velocidad o devuelve un error, WordPress recurre a mostrar un hipervínculo simple. Esto no es un error de WordPress — es el comportamiento de reserva esperado de oEmbed. Las incrustaciones en caché continúan renderizándose hasta que la caché se invalida (TTL predeterminado: 24 horas, controlado por el filtro oembed_ttl).

Método 1: Editor de bloques Gutenberg (recomendado)

El editor de bloques proporciona la ruta de incrustación más confiable porque valida la URL y renderiza una vista previa en vivo dentro del lienzo del editor antes de publicar.

Paso 1: Copiar la URL del tweet

En Twitter (X), navega hasta el tweet. Haz clic en el menú de tres puntos en la esquina superior derecha de la tarjeta del tweet y selecciona Copiar enlace a la publicación. El formato de la URL es:

https://twitter.com/<username>/status/<tweet_id>

o la variante más reciente x.com:

https://x.com/<username>/status/<tweet_id>

Ambos formatos de URL se resuelven correctamente a través del controlador oEmbed de WordPress. No uses URL acortadas t.co — requieren un paso adicional de resolución de redirección que puede fallar silenciosamente en algunos entornos de servidor.

Paso 2: Insertar el bloque de incrustación

En el editor de bloques de WordPress, haz clic en el insertador + y busca Twitter o Incrustar. Selecciona el bloque Twitter (listado bajo la categoría Incrustaciones). Aparece un campo de entrada de URL en línea.

Alternativamente, pega la URL del tweet directamente en un bloque de párrafo en blanco. Gutenberg detectará el patrón de URL de Twitter y te pedirá que conviertas el bloque en una incrustación automáticamente — haz clic en Incrustar cuando aparezca la información emergente.

Paso 3: Pegar la URL y confirmar

Pega la URL del tweet en el campo URL del bloque y presiona Enter o haz clic en Incrustar. Gutenberg consulta el endpoint oEmbed y renderiza una vista previa en vivo. Si la vista previa muestra “Lo sentimos, este contenido no se pudo incrustar”, el tweet es de una cuenta protegida, ha sido eliminado o el endpoint de Twitter devolvió un error. Actualiza el editor y vuelve a intentarlo antes de asumir que la URL no es válida.

Una vez que la vista previa se renderice correctamente, publica o actualiza la publicación.

Método 2: Editor Clásico

El Editor Clásico se basa en el mismo pipeline oEmbed, pero la URL debe colocarse correctamente para activar la incrustación automática.

Reglas para activar la incrustación automática

La clase WP_Embed de WordPress analiza el contenido de las publicaciones en busca de URL que aparezcan en su propia línea, rodeadas de espacios en blanco o saltos de párrafo, sin etiquetas de anclaje ni atributos HTML circundantes. Si envuelves la URL en un hipervínculo (<a href="...">) o la colocas en línea dentro de una oración, la incrustación automática se suprime y la URL se renderiza como texto simple.

En la pestaña Visual del Editor Clásico, pega la URL del tweet en una línea nueva y vacía. No añadas ningún texto circundante en la misma línea.

En la pestaña Texto (HTML), la URL debe aparecer entre etiquetas <p> por sí sola, así:

<p>https://twitter.com/username/status/1234567890123456789</p>

Haz clic en Actualizar o Publicar. El front end renderizará el tweet incrustado; la pestaña Visual del Editor Clásico puede no mostrar la vista previa en vivo, lo cual es el comportamiento esperado.

Método 3: URL oEmbed directa (incrustación programática)

Para desarrolladores que crean plantillas de página personalizadas o que rellenan contenido de forma programática, WordPress expone la función wp_oembed_get() y el shortcode </code>.</p>
<h3>Usando <code>wp_oembed_get()</code></h3>
<pre class="ppt-code-block"><code class="language-php"><?php
$tweet_url = 'https://twitter.com/WordPress/status/1234567890123456789';
$embed_html = wp_oembed_get( $tweet_url, array( 'width' => 550 ) );
if ( $embed_html ) {
echo $embed_html;
} else {
echo '<a href="' . esc_url( $tweet_url ) . '">View tweet</a>';
}
?></code></pre>
<p>La rama <code>else</code> es obligatoria en el código de producción. <code>wp_oembed_get()</code> devuelve <code>false</code> en caso de fallo — renderizar nada sin una reserva crea vacíos de contenido invisibles que confunden tanto a los usuarios como a los rastreadores.</p>
<h3>Usando el shortcode <code></code></h3>
<pre class="ppt-code-block"><code>https://twitter.com/username/status/1234567890123456789

Este shortcode es procesado por WP_Embed::shortcode() y sigue la misma lógica de caché y reserva que el pipeline de incrustación automática.

Método 4: Incrustar una línea de tiempo o widget de perfil de Twitter

El oEmbed de tweet individual no se aplica a las líneas de tiempo. Una línea de tiempo de perfil completa, una línea de tiempo de lista o una colección de hashtags requiere el widget de Líneas de tiempo incrustadas de Twitter, generado a través de la herramienta de publicación de Twitter.

Paso 1: Generar el código del widget

Navega a publish.twitter.com. Introduce uno de los siguientes formatos de URL en el campo de entrada:

Tipo de contenidoFormato de URL
Línea de tiempo del perfilhttps://twitter.com/username
Línea de tiempo de listahttps://twitter.com/username/lists/listname
Tweets que le gustanhttps://twitter.com/username/likes
Búsqueda de hashtagshttps://twitter.com/hashtag/keyword
Momentohttps://twitter.com/i/moments/moment_id

Selecciona Línea de tiempo incrustada, luego haz clic en Establecer opciones de personalización para configurar el ancho, la altura, el tema (claro/oscuro) y el idioma. Haz clic en Copiar código.

El código generado tiene este aspecto:

<a class="twitter-timeline"
   data-width="600"
   data-height="800"
   data-theme="dark"
   href="https://twitter.com/username">
  Tweets by username
</a>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Paso 2: Añadir el código a WordPress

En Gutenberg, añade un bloque de HTML personalizado en la posición deseada y pega el código de incrustación directamente.

En el Editor Clásico, cambia a la pestaña Texto (no Visual) y pega el código en la posición del cursor. Si pegas en la pestaña Visual, el sanitizador HTML del editor puede eliminar la etiqueta <script>, rompiendo el widget por completo.

Importante: La etiqueta de script widgets.js solo necesita aparecer una vez por página. Si incrustas múltiples widgets de Twitter en la misma página, incluye la etiqueta <script> solo con el primer widget y omítela de los siguientes para evitar la carga redundante de scripts y posibles condiciones de carrera en el renderizado.

Comparación de métodos

MétodoEditorRequiere llamada a la APISe renderiza en la vista previa del editorIdeal para
Bloque de Twitter (oEmbed)GutenbergTweets individuales, publicaciones estándar
URL de incrustación automáticaEditor ClásicoNoIncrustaciones rápidas, configuraciones heredadas
wp_oembed_get()PHP/PlantillasN/ATemas personalizados, contenido programático
Shortcode AmbosParcialConstructores de páginas basados en shortcodes
HTML personalizado (widget.js)AmbosNo (lado del cliente)NoLíneas de tiempo, feeds de hashtags, widgets de perfil
Incrustación basada en pluginAmbosVariableVariableCuración avanzada, gestión de reservas

Cambios en la API de Twitter y su impacto en las incrustaciones de WordPress

Desde la transición de Twitter a la plataforma X y la reestructuración de sus niveles de acceso a la API en 2023, varios comportamientos han cambiado y afectan directamente a las incrustaciones de WordPress:

Disponibilidad del endpoint oEmbed: El endpoint publish.twitter.com/oembed sigue siendo accesible públicamente sin autenticación para incrustaciones de tweets individuales. Sin embargo, la limitación de velocidad se ha vuelto más agresiva. Los sitios de alto tráfico que invalidan su caché oEmbed con frecuencia (por ejemplo, vaciando la caché de objetos de WordPress en cada despliegue) pueden encontrar respuestas HTTP 429, lo que hace que las incrustaciones vuelvan a ser enlaces simples.

Rendimiento de carga de widgets.js: El script platform.twitter.com/widgets.js se carga de forma asíncrona pero sigue introduciendo una dependencia de bloqueo de renderizado de terceros. Para la optimización de Core Web Vitals, considera cargarlo con un atributo defer o usando un patrón de fachada (un marcador de posición de captura de pantalla estática que carga el widget real solo en la interacción del usuario).

Tweets protegidos y eliminados: Una vez que se elimina un tweet o la cuenta se establece como protegida, el endpoint oEmbed devuelve un 404. WordPress almacena en caché esta respuesta 404, lo que significa que la incrustación no se recuperará automáticamente incluso si el tweet se restaura posteriormente. Debes borrar manualmente la caché oEmbed de la publicación eliminando las entradas de metadatos de publicación _oembed_* relevantes de la base de datos o usando un plugin como Oembed Reset.

Compatibilidad con URL de X.com: La lista de proveedores oEmbed de WordPress se actualizó para reconocer URL x.com además de URL twitter.com en WordPress 6.4. Si estás ejecutando una versión anterior de WordPress, las URL x.com no se incrustarán automáticamente — usa el formato de URL twitter.com en su lugar.

Incrustación basada en plugins: cuándo usarla

El oEmbed nativo es suficiente para la mayoría de los casos de uso. Considera un plugin dedicado cuando necesites:

  • Renderizado de reserva cuando el endpoint de Twitter no está disponible (los plugins pueden almacenar en caché una captura de pantalla estática)
  • Curación de tweets — mostrar un conjunto curado de tweets por ID sin depender de un widget de línea de tiempo en vivo
  • Carga diferida compatible con GDPR — diferir la solicitud widgets.js hasta que el usuario dé su consentimiento explícito al contenido de terceros
  • Estilos personalizados que anulan la apariencia predeterminada de la tarjeta de Twitter

Las opciones populares incluyen Smash Balloon Twitter Feed (para la curación de líneas de tiempo con caché local) y Embed Social (para feeds sociales multiplataforma). Ambos omiten el pipeline oEmbed por completo y utilizan sus propias integraciones de API.

Consideraciones de rendimiento y SEO

Carga diferida de widgets de Twitter: El script widgets.js añade aproximadamente 150–200 KB a la carga útil de tu página y activa varias solicitudes de red adicionales. Usa la API Intersection Observer o una plataforma de gestión de consentimiento para diferir la carga hasta que el widget entre en el viewport.

Datos estructurados: Los tweets incrustados no generan automáticamente marcado Schema.org. Si el tweet contiene una cita o afirmación factual que estás citando, añade un <blockquote> con itemscope y itemtype="https://schema.org/Quotation" alrededor de la incrustación para mayor claridad semántica.

Accesibilidad: El widget incrustado de Twitter incluye roles ARIA, pero el título del iframe tiene por defecto una cadena genérica. Anúlalo usando el atributo data-aria-label en la etiqueta <a> en el código de incrustación de la línea de tiempo para una mejor compatibilidad con lectores de pantalla.

Política de seguridad de contenido (CSP): Si tu instalación de WordPress aplica un encabezado CSP estricto, debes incluir en la lista blanca platform.twitter.com y cdn.syndication.twimg.com en tus directivas script-src y frame-src. No hacerlo bloquea silenciosamente el widget sin ningún error visible en el administrador de WordPress.

Si tu sitio WordPress se ejecuta en un entorno de Hosting VPS donde controlas los encabezados a nivel de servidor, puedes añadir las directivas CSP directamente en tu configuración de Nginx o Apache en lugar de depender de un plugin. Esto te da un control preciso sobre qué orígenes de terceros tienen permiso para ejecutar scripts en tus páginas.

Para sitios que usan VPS con cPanel, los encabezados CSP se pueden configurar a través del editor de reglas de ModSecurity o añadiendo directivas Header set Content-Security-Policy en el archivo .htaccess bajo el directorio public_html del dominio.

Borrar la caché oEmbed

Cuando una incrustación de tweet deja de renderizarse correctamente, la causa más común es una respuesta oEmbed obsoleta o con error en caché. WordPress almacena los datos oEmbed como metadatos de publicación con claves prefijadas por _oembed_. Para borrar la caché de una publicación específica:

DELETE FROM wp_postmeta
WHERE post_id = <your_post_id>
AND meta_key LIKE '_oembed_%';

Ejecuta esta consulta a través de phpMyAdmin, WP-CLI o tu herramienta de gestión de base de datos. Después de borrar, la próxima carga de página volverá a obtener los datos oEmbed del endpoint de Twitter.

Usando WP-CLI, puedes apuntar a una publicación específica de forma más segura:

wp post meta delete <post_id> --all --match="_oembed_*"

O vaciar todas las cachés oEmbed en todo el sitio (usar con precaución en sitios grandes):

wp eval 'global $wpdb; $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE "_oembed_%"");'

Para equipos que ejecutan WordPress en Servidores Dedicados, programar este comando WP-CLI como un trabajo cron después de cada despliegue garantiza que las cachés de incrustación obsoletas no persistan entre actualizaciones de contenido.

Consideraciones sobre el entorno de alojamiento

La fiabilidad de las incrustaciones de tweets está directamente relacionada con la capacidad de tu servidor para realizar solicitudes HTTP salientes a publish.twitter.com. Varias configuraciones de alojamiento pueden bloquear silenciosamente estas solicitudes:

  • Reglas de firewall que restringen las conexiones salientes a puertos no estándar o rangos de IP específicos
  • Directivas PHP disable_functions que bloquean curl_exec() o file_get_contents() con URL externas
  • allow_url_fopen = Off en php.ini, que impide que la API HTTP de WordPress use el fallback del wrapper de flujo
  • Entornos de alojamiento compartido con limitación agresiva de solicitudes salientes

En los planes de Alojamiento Web Compartido, si oEmbed falla constantemente, verifica que allow_url_fopen esté habilitado en tu configuración PHP y que cURL esté disponible. Puedes comprobar ambos desde el administrador de WordPress en Herramientas > Estado del sitio > Información > Servidor.

Si tu sitio también gestiona correo electrónico transaccional o contenido de boletines que hace referencia a tweets incrustados, asegúrate de que tu entorno de Alojamiento de Correo Electrónico esté configurado por separado de tu servidor web para evitar la contención de recursos durante los períodos de alto tráfico.

SSL y contenido mixto

Si tu sitio WordPress se ejecuta sobre HTTPS (lo cual es obligatorio para cualquier despliegue moderno), los iframes de tweets incrustados también deben cargarse sobre HTTPS. El endpoint oEmbed de Twitter y widgets.js se sirven exclusivamente sobre HTTPS, por lo que esto no suele ser un problema con las incrustaciones estándar.

Sin embargo, si estás construyendo HTML de incrustación manualmente o usando una incrustación en caché más antigua que hace referencia a URL http://, los navegadores bloquearán el iframe como contenido mixto. Audita el contenido de tus publicaciones en busca de referencias http://platform.twitter.com y reemplázalas por https://. Para sitios con Certificados SSL correctamente configurados, este escenario de contenido mixto es la causa más común de que las incrustaciones se rendericen como cuadros en blanco en producción mientras aparecen correctamente en el administrador de WordPress (al que se puede acceder a través de HTTP en configuraciones incorrectas).

Lista de verificación de decisiones técnicas

Usa esta matriz para seleccionar el enfoque de incrustación correcto para tu escenario específico:

  • Tweet individual, editor Gutenberg, sin código personalizado: Usa el bloque de incrustación de Twitter — pega la URL, confirma la vista previa, publica.
  • Tweet individual, Editor Clásico: Pega la URL twitter.com/status/ en su propia línea en la pestaña Visual; verifica en la pestaña Texto que no esté envuelta en una etiqueta de anclaje.
  • Tweet individual, plantilla PHP o tipo de publicación personalizado: Usa wp_oembed_get() con una reserva explícita para valores de retorno false.
  • Línea de tiempo de perfil o feed de hashtags: Genera el código del widget desde publish.twitter.com, insértalo mediante el bloque HTML personalizado en Gutenberg o la pestaña Texto en el Editor Clásico.
  • Sitio de alto tráfico con vaciados frecuentes de caché: Implementa caché de objetos persistente (Redis o Memcached) para reducir la frecuencia de llamadas a la API oEmbed y evitar la limitación de velocidad.
  • Audiencia sensible al GDPR: Usa un plugin con carga de widget condicionada al consentimiento; no cargues widgets.js hasta que se registre el consentimiento explícito del usuario.
  • La incrustación dejó de renderizarse después de la eliminación del tweet: Borra los metadatos de publicación _oembed_* para la publicación afectada y reemplázalos con una captura de pantalla estática o elimina la incrustación.
  • Encabezado CSP bloqueando widgets: Incluye en la lista blanca platform.twitter.com y cdn.syndication.twimg.com en las directivas script-src y frame-src a nivel de servidor.
  • URL x.com que no se incrustan: Cambia al formato de URL twitter.com si ejecutas WordPress anterior a 6.4, o actualiza el núcleo de WordPress.

Preguntas frecuentes

¿Por qué mi tweet incrustado aparece como un enlace simple en lugar de una tarjeta renderizada?

La solicitud oEmbed de WordPress al endpoint de Twitter falló o devolvió un error, y WordPress almacenó en caché ese fallo. Borra los metadatos de publicación _oembed_* para la publicación afectada, verifica que tu servidor pueda realizar solicitudes HTTPS salientes a publish.twitter.com y confirma que el tweet no haya sido eliminado ni configurado como privado.

¿Afecta la incrustación de tweets a la velocidad de carga de la página?

Sí. El script widgets.js de Twitter tiene aproximadamente 150–200 KB y activa solicitudes adicionales a cdn.syndication.twimg.com. Mitiga esto cargando el script de forma diferida con Intersection Observer o usando una fachada estática que solo carga el widget en vivo en la interacción del usuario.

¿Puedo incrustar tweets de cuentas protegidas (privadas)?

No. El endpoint oEmbed de Twitter devuelve un 404 para tweets de cuentas protegidas, independientemente del estado de seguimiento de tu propia cuenta. No existe ninguna solución alternativa compatible — debes usar una captura de pantalla con la atribución adecuada en su lugar.

¿Qué ocurre con los tweets incrustados si el endpoint oEmbed de Twitter deja de funcionar?

WordPress sirve el HTML de incrustación en caché durante hasta 24 horas (TTL predeterminado). Después de que expire la caché, la incrustación se degrada a un hipervínculo simple hasta que el endpoint se recupere. Para extender el TTL de la caché, añade esto al functions.php de tu tema:

add_filter( 'oembed_ttl', function( $ttl ) {
    return 7 * DAY_IN_SECONDS; // Cache for 7 days
} );

¿Los tweets incrustados cuentan para los límites de velocidad de la API de Twitter?

El endpoint oEmbed (publish.twitter.com/oembed) es independiente de la API v2 de Twitter y no consume tokens de API ni cuenta contra los límites de velocidad del nivel de desarrollador. Sin embargo, está sujeto a sus propios límites de velocidad no documentados basados en la dirección IP, lo que puede afectar a sitios de alto volumen que invalidan frecuentemente su caché oEmbed de WordPress.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar