使用 WordPress 的 Easy Embeds 功能
WordPress 的 Easy Embeds 功能
有没有想过,只需要在日志中输入一个视频网站或者图片分享的 URL,这个 URL 里面含有的视频或者图片就自动显示出来?这样是不是很 Cool,这个就是 WordPress 的 Easy Embeds 的功能,让你直接发布一个 URL(需要单独一行,纯文本,不带链接才行),就能把这个 URL 中的视频显示到博客上,并且会根据博客的布局调整视频的大小。
比如,在日志中直接输入这个 instagram 地址:
http://instagram.com/p/TSZleFg3A3/
WordPress 就会自动把这个 URL 转化成 instagram 该页的照片和链接:
http://instagram.com/p/TSZleFg3A3/
这个就是 WordPress 2.9 引入的 Easy Embeds 功能,需要将 WordPress 的 “Auto-embeds” 的功能打开:
到了 WordPress 3.5 版本之后,WordPress 就默认支持这个功能了,没有了上面的选项。
另外还可以使用 [embed] 这个 shortcode 来显示图片,使用 [embed] shortcode 就不再需要把链接放到独立的一行了。
[embed]http://instagram.com/p/TSZleFg3A3/[/embed]
oEmbed
这个 Easy Embeds 功能主要是由 oEmbed 驱动的,oEmbed 是一种站点 A (比如你的博客)向站点 B (比如 YouTube)去请求嵌入内容(比如视频)的 HTML 代码的协议。
oEmbed 设计出来是为了嵌入媒体网站的内容的时候避免复制和粘贴 HTML 代码,它支持视频,图片,文本等等更多。
oEmbed Discovery
什么是 oEmbed discovery?媒体服务提供商在 head 添加一部分代码告诉程序他们的 oEmbed provider 在哪里,这样就可以自动添加嵌入的内容而无需事先处理。
现在 WordPress Easy Embeds 支持的网站
并不是所有的网站都支持的,现在 WordPress 支持以下网站:
- blip.tv
- DailyMotion
- Flickr (both videos and images)
- FunnyOrDie.com (WordPress 3.0+)
- Hulu
- Instagram (WordPress 3.5+)
- Qik
- Photobucket
- PollDaddy
- Revision3
- Scribd
- SlideShare (WordPress 3.5+)
- SoundCloud (WordPress 3.5+)
- SmugMug (WordPress 3.0+)
- Twitter (WordPress 3.4+)
- Viddler
- Vimeo (note older versions of WP have issues with https embeds, just remove the s from the https to fix)
- YouTube (only public videos and playlists - "unlisted" and "private" videos will not embed)
- WordPress.tv (only VideoPress-type videos for the time being)
所以这些网站的视频和图片,你只需贴入 URL,WordPress 就会帮你自动转换成可以查看的图片或者视频。
WordPress 默认是关闭直接嵌入支持 oEmbed discovery 网站的内容,这样做也是为了防止一些网站可能存在恶意代码的风险,但是如果你能保证你引用网站,那么你可以通过以下代码开启 WordPress 的 oEmbed discovery,这样只要贴入支持 oEmbed Discvery 网站的 URL 就会自动嵌入内容。
add_filter( 'embed_oembed_discover', '__return_true' );
如何支持更多的网站
添加支持 oEmbed 协议的网站
只需要去调用 wp_oembed_add_provider()
函数就可以了,格式如下:
wp_oembed_add_provider( 'http://site.com/watchvideo/*', 'http://site.com/oembedprovider' );
添加不支持 oEmbed 协议的网站
添加不支持 oEmbed 协议的网站可能就比较麻烦点,需要使用 wp_embed_register_handler()
函数去注册一个 callback 函数去产生 HTML。
目前我已经实现了优酷和土豆: