我假设您只对第一个能够成功发现实际oembed数据的URL感兴趣。oembed系统处理它找到的所有链接,但显然不是每个链接都有oembed。
您要使用的过滤器是embed\\u oembed\\u html,它获取oembed缓存的html、url、嵌入上的任何属性以及post\\u ID,这对您的代码很重要。
add_filter(\'embed_oembed_html\', \'my_function\',10,4);
function my_function( $cache, $url, $attr, $post_ID ) {
global $my_previous_post_id;
if ($my_previous_post_id != $post_ID) {
// post ID changed, so this is the first oembed for the post
// do something with $url
$my_previous_post_id = $post_ID;
}
return $cache; // it\'s important that you return the $cache value as-is
}
现在,整个oembed系统与短代码同时运行:在\\u内容过滤器调用期间。因此,如果要获取标题的内容,必须在标题中启动主循环,在get\\u the\\u content()值上运行\\u content过滤器,然后调用rewind\\u posts()将查询返回到页面中实际主循环的开始位置。
这种行为会导致插件(如Nextgen gallery)出现问题,当您在标头中运行循环时,插件会做一些愚蠢的事情。没有办法解决这个问题,但事实是这些插件根本就坏了,你无法纠正它们的问题。我一直与证监会股票和证监会一起收到此类报告(因为他们也会将内容拉出来放在标题中)。坦白地说,你对此无能为力。