El problema:
La razón por la que esto no funciona, es esta parte del método WP_Embed::shortcode()
:
if( $post_ID ) {
.... cut ...
// Use oEmbed to get the HTML
$html = wp_oembed_get( $url, $attr );
... cut ...
}
Al tratar de auto-integrarse con la API de Heartbeat, $post_ID
es null
, por lo que wp_oembed_get()
nunca se activa.
Sin almacenamiento en caché:
Cuando introdujo automáticamente el enlace de Twitter en el editor de publicación, para un $post_ID
dado, el HTML oembed se almacena en la tabla de metadatos bajo una clave como esta: _oembed_7bc759c5dcea2e4b77c939fc109996fb
y un valor como este:
<blockquote class="twitter-tweet" width="550">
<p>
WordPress 3.9 “Smith” is now available with a smoother media editing experience,
live widget previews, and more:
<a href="http://t.co/mEbgUFdpyG">http://t.co/mEbgUFdpyG</a>
</p>
— WordPress (@WordPress)
<a href="https://twitter.com/WordPress/statuses/456502643738030080">April 16, 2014</a>
</blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
Cada enlace oembed obtiene su propia fila en la tabla de metadatos posteriores, bueno, si no es parte de los manejadores oembed predeterminados.
Este mecanismo de almacenamiento en caché se omite cuando falta el $post_ID
, por lo que es posible que desee considerar un almacenamiento en caché para su configuración.
Posibles soluciones:
i) Debe tomar todas las coincidencias de '|^\s*(https?://[^\s"]+)\s*$|im'
, dentro de su cadena, ejecutarla a través de la función wp_oembed_get()
y reemplazar los enlaces de la cadena original.
ii) También podríamos asociarlo con una publicación determinada, dentro de la devolución de llamada test_heartbeat_received
:
global $wp_embed, $post;
$post = get_post( 3147 ); // Post ID: 3147
$content = $wp_embed->autoembed( $content );
$response['test_heartbeat'] = $content;
para sortear la parte faltante de $post_ID
y usar el almacenamiento en caché predeterminado para esa publicación. Solo tienes que recordar que la memoria caché de datos se borra al actualizar esa publicación.
Si intenta, por ejemplo, dos enlaces de Twitter, con el método anterior:
$content = "
<div>
https://twitter.com/WordPress/status/456502643738030080
</div>
<div>
https://twitter.com/WordPress/status/459387231870799872
</div>
";
luego, después del proceso de autoenganche, obtienes dos filas en la tabla de metadatos posteriores, asignadas a post_id: 3147
: