本文介绍了过滤WordPress oEmbed提供程序列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将如何过滤WordPress oEmbed提供程序列表?我的目标是只允许Twitter和Youtube.

How would I filter the WordPress oEmbed provider list? My aim is to allow just Twitter and Youtube.

编辑:我可以做这样的事情吗?

Could I do something like this?

function filter_oembed_provider_list( $array ) {
    $array = array( 'http://youtu.be/*' => array( 'http://www.youtube.com/oembed',                     false ) );
    return $array;
}
add_filter( 'oembed_providers', 'filter_oembed_provider_list' );

但这似乎不起作用.

请在class-oembed.php中查看相关代码:

Please see the relevant code in class-oembed.php:

apply_filters( 'oembed_providers', array(
        '#https?://(www\.)?youtube\.com/watch.*#i'           => array( 'http://www.youtube.com/oembed',                     true  ),
        'http://youtu.be/*'                                  => array( 'http://www.youtube.com/oembed',                     false ),
        'http://blip.tv/*'                                   => array( 'http://blip.tv/oembed/',                            false ),
        '#https?://(www\.)?vimeo\.com/.*#i'                  => array( 'http://vimeo.com/api/oembed.{format}',              true  ),
        '#https?://(www\.)?dailymotion\.com/.*#i'            => array( 'http://www.dailymotion.com/services/oembed',        true  ),
        'http://dai.ly/*'                                    => array( 'http://www.dailymotion.com/services/oembed',        false ),
        '#https?://(www\.)?flickr\.com/.*#i'                 => array( 'http://www.flickr.com/services/oembed/',            true  ),
        'http://flic.kr/*'                                   => array( 'http://www.flickr.com/services/oembed/',            false ),
        '#https?://(.+\.)?smugmug\.com/.*#i'                 => array( 'http://api.smugmug.com/services/oembed/',           true  ),
        '#https?://(www\.)?hulu\.com/watch/.*#i'             => array( 'http://www.hulu.com/api/oembed.{format}',           true  ),
        '#https?://(www\.)?viddler\.com/.*#i'                => array( 'http://lab.viddler.com/services/oembed/',           true  ),
        'http://qik.com/*'                                   => array( 'http://qik.com/api/oembed.{format}',                false ),
        'http://revision3.com/*'                             => array( 'http://revision3.com/api/oembed/',                  false ),
        'http://i*.photobucket.com/albums/*'                 => array( 'http://photobucket.com/oembed',                     false ),
        'http://gi*.photobucket.com/groups/*'                => array( 'http://photobucket.com/oembed',                     false ),
        '#https?://(www\.)?scribd\.com/.*#i'                 => array( 'http://www.scribd.com/services/oembed',             true  ),
        'http://wordpress.tv/*'                              => array( 'http://wordpress.tv/oembed/',                       false ),
        '#https?://(.+\.)?polldaddy\.com/.*#i'               => array( 'http://polldaddy.com/oembed/',                      true  ),
        '#https?://(www\.)?funnyordie\.com/videos/.*#i'      => array( 'http://www.funnyordie.com/oembed',                  true  ),
        '#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i'=> array( 'http://api.twitter.com/1/statuses/oembed.{format}', true  ),
        '#https?://(www\.)?soundcloud\.com/.*#i'             => array( 'http://soundcloud.com/oembed',                      true  ),
        '#https?://(www\.)?slideshare\.net/*#'               => array( 'http://www.slideshare.net/api/oembed/2',            true  ),
        '#http://instagr(\.am|am\.com)/p/.*#i'               => array( 'http://api.instagram.com/oembed',                   true  ),
        '#https?://(www\.)?rdio\.com/.*#i'                   => array( 'http://www.rdio.com/api/oembed/',                   true  ),
        '#https?://rd\.io/x/.*#i'                            => array( 'http://www.rdio.com/api/oembed/',                   true  ),
        '#https?://(open|play)\.spotify\.com/.*#i'           => array( 'https://embed.spotify.com/oembed/',                 true  ),
    ) );

推荐答案

有一个内置函数 wp_oembed_remove_provider wp_oembed_add_provider .

There is a built-in function wp_oembed_remove_provider, respectively wp_oembed_add_provider.

编辑

添加到functions.php文件

add to functions.php file

function customize_oembed() {

    //load oembed class
    require_once ABSPATH . DIRECTORY_SEPARATOR . 'wp-includes' . DIRECTORY_SEPARATOR . 'class-oembed.php';

    //get a singleton object
    $oembed = _wp_oembed_get_object();

    /**
     * Forget about those lines
     *
       //empty the providers list
       $oembed->providers = array();

       //add what you want
       wp_oembed_add_provider( 'http://site.com/watchvideo/*', 'http://site.com/oembedprovider' );  
    */

    //use applying a filter
    $providers = array(
        'youtube' => array( 'http://www.youtube.com/oembed', false), 
        'twitter'=> array( 'http://api.twitter.com/1/statuses/oembed.{format}', true  )
    );
    $oembed->providers = apply_filters('oembed_providers', $providers);
}
add_action('init', 'customize_oembed');

编辑2

我调查了一下,发现,可以完全按照相同的方式使用过滤器oembed_providers,就像在类的构造函数中使用过滤器一样.因此,当您可以在一个函数中执行此操作时,使用额外的wordpress函数(将再次尝试要求类文件并实例化单个对象)是没有用的.

I looked into it, and I found out, that you can use a filter oembed_providers exactly in the same way, as it is used in a constructor of the class. Therefore using additional wordpress functions, which would again try to require the class file and instantiate a singleton object, is useless, when you can do it in one function.

(尽管事实上,它可以工作,但我仍然没有使用此过滤器:-D)

(Despite of the fact, that it works, i still do not get a usage of this filter :-D)

编辑3

最后,我开始工作了.

它实际上与您的代码相似,尽管函数中的参数基本上没有用.它只为您提供要覆盖的原始提供程序,因此您不使用它,可以直接返回一个数组.

It is really similar code to yours, though the argument in the function is basically useless. It only gives you original providers, which you want to override, so you are not using it and you can return an array directly.

也许要记住的重要一点是,在编辑列表之后,您需要更新您的帖子,因为wordpress会将一些数据保存到键_oembed_…下的表*_postmeta

Maybe the important thing to remember is, after editing your list, you need to update your posts, since wordpress is saving some data into table *_postmeta under key _oembed_…

function filter_oembed_provider_list( ) {
    return array( 'http://youtu.be/*' => array( 'http://www.youtube.com/oembed', false ) );
}
add_filter( 'oembed_providers', 'filter_oembed_provider_list' );

这篇关于过滤WordPress oEmbed提供程序列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 23:15