禁用 WordPress 中的 oEmbed 功能

很久没有折腾水景一页所用的 WordPress 了。检查一个错误页面的源代码的时候突然发现多了一些带 oembed 字样的链接。一查才知道 WordPress 从 2.9 版的时候引入 embeds 功能,又在 4.4 版发行的时候增强此功能并引入了 oEmbed 声明与支持。水景一页的选择是完全禁用它。

在这个互联互通泛滥的年代引入这样的功能似乎也算是顺应潮流,也可以给经常在页面引用视频、音乐、状态等内容的作者提供很大的方便:只需要粘贴进去指向特定内容页面的链接,WP 就会自动将该页面的主要内容(视频、音乐、帖子等)以嵌入对象的方式展示出来,而不再需要作者去考虑嵌入代码的调整(类型、样式、大小等)。

对于一个影响甚大的功能的引入至少应该提供一个简单的控制选项吧。究竟有多大比例的用户需要这样的功能我无从知晓,至少我不需要,更不需要自己的文章内容可以很方便的以豆腐块形状的嵌入式分享展现在别人的网站上。别人要么引用网址链接,要么直接抄,似乎没人会像在微博上分享文章那样只引用个标题和摘要。而 WordPress 核心开发论坛上有开发者表示,只有极少数用户可能有禁用该功能的需要,并且不提供选项是为了用户考虑,可以让用户避免去“纠结”到底要不要禁用它。当然他们也好心的提供了一个插件 Disable Embeds 来禁用此功能。

所以现实的问题是,要不你就用默认的 WordPress 功能,要么你就装一堆插件来禁用一些功能。WordPress 终于从需要插件来增强功能进化到需要插件来禁用功能了。在水景一页看来,这似乎并不是个值得高兴的现象。也许有一天水景一页需要考虑迁移到另一个不那么臃肿的博客软件上。而早在两年前就有网友离 WP 而去并且推荐水景一页这么做了。

因为水景一页使用的是多站点形式的 WordPress,所以在 wp-content 文件夹下建了个 mu-plugins 目录来放置全站启用的插件。而为了让插件页面的列表看起来不要那么长,就自己做了个插件框架,把所有对 WP 的小调整的代码都放到了一起,成为了一个基础插件。于是就把上面 Disable Embeds 的主要代码给复制进去禁用了所有 Embeds 功能。

也有网友用挑选出来的代码功能段,将它们直接放到了主题的 functions.php 文件中。这个对单站点来说还是很方便的,只是要注意在更新主题的时候保存好修改过的 functions.php 文件。需要的代码如下,

remove_action('rest_api_init', 'wp_oembed_register_route');
remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10);
remove_filter('oembed_response_data', 'get_oembed_response_data_rich', 10, 4);
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
// Remove the Link header for the WP REST API
// [link] => <http://cnzhx.net/wp-json/>; rel="https://api.w.org/"
remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );

各位网友对此有什么看法呢?欢迎留言分享。

©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/disable-oembed-in-wordpress/>。转载请保留此信息及相应链接。

2 条关于 “禁用 WordPress 中的 oEmbed 功能” 的评论

    • 这个功能对于有需要的用户来说自然是极好的。可是对于不需要的用户就很不划算了,因为增加了服务器负荷不说,现在还增加了一个网页资源 wp-embed.min.js

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)