O problema:
A razão pela qual isso não está funcionando é parte do método WP_Embed::shortcode()
:
if( $post_ID ) {
.... cut ...
// Use oEmbed to get the HTML
$html = wp_oembed_get( $url, $attr );
... cut ...
}
Ao tentar se agrupar automaticamente à API Heartbeat, o $post_ID
é null
, portanto wp_oembed_get()
nunca é ativado.
Sem cache:
Quando você autoembena o link do Twitter no editor de postagem, para um determinado $post_ID
, o HTML da oembed é armazenado em cache na meta-tabela de postagem em uma chave como esta: _oembed_7bc759c5dcea2e4b77c939fc109996fb
e um 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 link obtido obtém sua própria linha na pós-meta-tabela, bem, se não fizer parte dos manipuladores padrão do oembed.
Esse mecanismo de armazenamento em cache é ignorado quando o $post_ID
está ausente, portanto, convém considerar algum armazenamento em cache para sua configuração.
Possíveis soluções alternativas:
i) Você precisa pegar todas as correspondências de '|^\s*(https?://[^\s"]+)\s*$|im'
, dentro de sua string, e executá-las através da função wp_oembed_get()
e substituir os links da string original.
ii) Poderíamos associá-lo a uma determinada postagem, dentro do retorno de chamada test_heartbeat_received
:
global $wp_embed, $post;
$post = get_post( 3147 ); // Post ID: 3147
$content = $wp_embed->autoembed( $content );
$response['test_heartbeat'] = $content;
para contornar a parte $post_ID
ausente e usar o cache padrão para essa postagem. Você só precisa lembrar que o cache oembed é limpo quando você atualiza esse post.
Se você tentar, por exemplo, dois links do Twitter, com o método acima:
$content = "
<div>
https://twitter.com/WordPress/status/456502643738030080
</div>
<div>
https://twitter.com/WordPress/status/459387231870799872
</div>
";
depois do processo de gravação automática, você obtém duas linhas na meta-tabela, atribuídas a post_id: 3147
: