问题:这不起作用的原因是WP_Embed::shortcode()
方法:
if( $post_ID ) {
.... cut ...
// Use oEmbed to get the HTML
$html = wp_oembed_get( $url, $attr );
... cut ...
}
尝试使用心跳API自动嵌入时
$post_ID
是
null
, 所以
wp_oembed_get()
从未激活。
无缓存:
当您在帖子编辑器中自动嵌入推特链接时,对于给定的
$post_ID
, oembed HTML缓存在post meta表中的一个键下,如下所示:
_oembed_7bc759c5dcea2e4b77c939fc109996fb
还有这样一个值:
<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>
每个oembed链接在post元表中都有自己的行,如果它不是默认oembed处理程序的一部分。
当$post_ID
缺少,因此您可能需要考虑对设置进行一些缓存。
可能的解决方法:
i) 你需要把
\'|^\\s*(https?://[^\\s"]+)\\s*$|im\'
, 在字符串中,并通过
wp_oembed_get()
函数并替换原始字符串中的链接。
ii) 我们还可以在test_heartbeat_received
回调:
global $wp_embed, $post;
$post = get_post( 3147 ); // Post ID: 3147
$content = $wp_embed->autoembed( $content );
$response[\'test_heartbeat\'] = $content;
找到失踪的人
$post_ID
part并使用该帖子的默认缓存。您只需记住,当您更新帖子时,oembed缓存将被清除。
例如,如果使用上述方法尝试两个Twitter链接:
$content = "
<div>
https://twitter.com/WordPress/status/456502643738030080
</div>
<div>
https://twitter.com/WordPress/status/459387231870799872
</div>
";
然后在自动嵌入过程之后,在post元表中获得两行,分配给
post_id: 3147
: