我正在尝试用一些Facebook即时文章友好代码(仅针对该提要)将任何iframe/嵌入到我的内容中。我已经让它工作了,但它也将此代码添加到oEmbed输出中,从而添加到一个不需要的包装器中(因为Facebook即时文章已经处理了oEmbed嵌入)。
基本上,我怎样才能在oEmbed发生之前完成iFrame/Embed的包装?
以下是我的代码:
function wrap_iframe( $content ) {
if (is_feed( INSTANT_ARTICLES_SLUG )) {
// Match any iframes or embeds
$pattern = \'~<iframe.*</iframe>|<embed.*</embed>~\';
preg_match_all( $pattern, $content, $matches );
foreach ( $matches[0] as $match ) {
$wrappedframe = \'<figure class="op-interactive"><iframe>\' . $match . \'</iframe></figure>\';
$content = str_replace($match, $wrappedframe, $content);
}
return $content;
}
}
add_filter( \'the_content\', \'wrap_iframe\' );
最合适的回答,由SO网友:Sumit 整理而成
WordPress将URL嵌入到同一过滤器上,优先级为8
在里面/wp-includes/class-wp-embed.php
// Attempts to embed all URLs in a post
add_filter( \'the_content\', array( $this, \'autoembed\' ), 8 );
然后,您将以10的优先级解析内容,然后您将获得解析后的输出。
你只需要在WordPress嵌入URL之前尽早完成
add_filter( \'the_content\', \'wrap_iframe\', 5 );