包装iframe/嵌入,但要在oEmbedding发生之前完成

时间:2016-04-12 作者:KKranzo

我正在尝试用一些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\' );

2 个回复
最合适的回答,由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 );

SO网友:Petr Cibulka

对此有一个特定的筛选器:embed_oembed_html.

add_filter(\'embed_oembed_html\', function($html) {
    return \'<figure class="op-interactive">\'.$html.\'</figure>\';
}, 11); 
资料来源:Wordpress codex

相关推荐

Use oEmbed for static html

我正在尝试添加jQuery插件(https://github.com/rmanivannan/speedometer-jquery-plugin) 到Wordpress页面(不是post),但是插件的行为不符合预期。我认为这可能与使用我的Wordpress主题生成页面时脚本引用、css引用和Javascript被破坏的方式有关。是否可以:-将包含控件的静态HTML页面上载到子域-使用oEmbed将静态HTML页面包括在Wordpress页面中i、 e.子域将是主域的oEmbed提供程序?