首页 > CMS教程 > WordPress > 正文

WordPress自动嵌入是什么?怎样关闭自动嵌入?

幻夢星雲
发布: 2025-08-30 14:18:03
原创
1011人浏览过
WordPress的oEmbed功能可自动将URL转为嵌入内容,提升便利性但影响性能、控制力与隐私。通过在functions.php添加代码可彻底关闭该功能,虽降低操作便捷性,但能提升加载速度、增强安全性,并可通过手动iframe、短代码、专用插件或自托管等方式实现更可控的内容嵌入。

wordpress自动嵌入是什么?怎样关闭自动嵌入?

WordPress的自动嵌入功能,简单来说,就是当你把某些特定网站(比如YouTube视频链接、Twitter推文链接)的URL粘贴到文章编辑器里时,WordPress会自动将其转换成可直接观看或互动的嵌入内容,而不需要你手动去复制粘贴复杂的嵌入代码。至于如何关闭它,最直接的方法通常是通过主题的

functions.php
登录后复制
文件添加一段代码,或者使用特定的插件来管理。

解决方案

要彻底关闭WordPress的自动嵌入(oEmbed)功能,你可以将以下代码片段添加到你的主题(或子主题)的

functions.php
登录后复制
文件中。请务必在使用子主题时进行此操作,以避免主题更新时代码丢失。

function disable_embeds_init() {
    // 移除所有与oEmbed相关的功能
    remove_action( 'rest_api_init', 'wp_oembed_register_rest_route' );
    remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );
    remove_action( 'embed_head', 'enqueue_embed_scripts' );
    remove_filter( 'embed_oembed_html', 'embed_oembed_html' );
    remove_action( 'embed_content_emojis', 'disable_embed_content_emojis' );
    remove_action( 'the_content_feed', 'wp_oembed_activate_service', 10 );
    remove_action( 'the_content_rss', 'wp_oembed_activate_service', 10 );
    remove_action( 'wp_head', 'wp_oembed_add_host_js' );

    // 禁用oEmbed自动发现
    add_filter( 'embed_oembed_discover', '__return_false' );

    // 禁用oEmbed解析
    add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );
    add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
    add_filter( 'query_vars', 'disable_embeds_query_vars' );
    add_filter( 'wp_enqueue_scripts', 'disable_embeds_dequeue_scripts' );
}
add_action( 'init', 'disable_embeds_init', 9999 );

// 移除TinyMCE的oEmbed插件
function disable_embeds_tiny_mce_plugin( $plugins ) {
    return array_diff( $plugins, array( 'wpembed' ) );
}

// 移除重写规则
function disable_embeds_rewrites( $rules ) {
    foreach ( $rules as $rule => $rewrite ) {
        if ( false !== strpos( $rewrite, 'embed=true' ) ) {
            unset( $rules[ $rule ] );
        }
    }
    return $rules;
}

// 移除查询变量
function disable_embeds_query_vars( $public_query_vars ) {
    return array_diff( $public_query_vars, array( 'embed' ) );
}

// 移除前端脚本和样式
function disable_embeds_dequeue_scripts() {
    wp_dequeue_script( 'wp-embed' );
}
登录后复制

这段代码会从多个层面禁用oEmbed功能,包括REST API路由、头部发现链接、前端脚本以及编辑器插件等,确保其不再自动运行。

WordPress的oEmbed功能究竟是什么,它带来的利弊我怎么看?

说起WordPress的oEmbed,我个人觉得它真是个“爱恨交织”的功能。从技术角度看,oEmbed其实是一种开放标准,允许网站通过提供一个简单的URL来请求并获取另一个网站内容的嵌入代码(HTML),这样一来,你就不需要去目标网站复制一堆复杂的

<iframe>
登录后复制
或者其他代码了。WordPress把它集成进来,目的很明确:让内容创作者发布内容更方便、更直观。

好处显而易见:你写文章时想引用个YouTube视频,直接把链接一贴,哗啦一下就变成视频播放器了,省心省力,内容也显得更丰富、更生动。对于很多非技术出身的博主来说,这简直是福音,大大降低了创作门槛。网站访客也能直接在你的页面上看到这些内容,提升了用户体验,不用跳来跳去。

但问题也随之而来,有时候甚至会让我觉得有些头疼。首先是性能问题。每次自动嵌入一个外部内容,就意味着你的页面需要向那个外部服务(比如YouTube、Twitter)发出请求,加载额外的CSS、JavaScript。如果你的文章里嵌入了大量这类内容,页面加载速度可能会受到影响,这对于追求极致性能的网站来说,是难以接受的。用户体验固然重要,但慢吞吞的网站会让用户流失得更快。

其次是控制力。自动嵌入的内容样式通常是固定的,你很难去自定义它,比如我想让视频播放器边缘更圆润一点,或者字体小一点,往往就无能为力。更糟糕的是,一些外部服务可能会在嵌入内容中加入自己的跟踪代码,这涉及到用户隐私问题,而且可能在你不知情的情况下收集访客数据。对于我这种比较注重网站自主权和访访问者隐私的人来说,这种“失控感”是有点让人不舒服的。

再者,安全隐患也不是没有。虽然WordPress和oEmbed标准本身是安全的,但如果嵌入源出现问题,或者被恶意利用,理论上也有可能对你的网站造成间接影响。虽然这种情况不常见,但作为网站管理员,多一份警惕总是好的。

所以,我常常在想,这种便利性是不是真的值得我们牺牲一部分性能、控制力和潜在的隐私风险?我的观点是,这取决于你的网站定位和需求。对于一个内容为王、不那么在意性能细节的个人博客,oEmbed可能很实用。但对于一个商业网站、性能敏感型网站,或者特别注重用户隐私的平台,我倾向于更严格地控制外部内容的引入方式。

关闭oEmbed后,我遇到过哪些实际的“坑”和“甜头”?

关闭WordPress的oEmbed功能,对我来说,体验是两极分化的。确实有些地方让我觉得“真香”,但也有一些小“坑”需要提前做好心理准备。

先说“甜头”吧,最明显的感受就是页面加载速度有了提升。以前我的一些文章里会嵌入好几个YouTube视频,或者Twitter推文,用PageSpeed Insights一测,总能看到好几项关于外部资源加载的警告。禁用oEmbed后,这些额外的HTTP请求和脚本加载就没了,页面资源占用明显减少,用户访问起来感觉确实快了不少。对于SEO来说,加载速度的提升也是一个积极信号。

其次是控制力回归。这是我非常看重的一点。现在如果我想嵌入视频,我就得手动去YouTube复制

<iframe>
登录后复制
代码,或者使用特定的视频插件。这听起来麻烦,但好处是我可以完全控制
<iframe>
登录后复制
的属性,比如设置宽度、高度,甚至添加
loading="lazy"
登录后复制
来实现懒加载。对于YouTube视频,我甚至可以用一些插件,或者自己写代码,只显示一个带播放按钮的缩略图,用户点击后才加载视频,这大大优化了初次加载的体验,也更好地保护了用户隐私(毕竟用户不点击,就不会连接到YouTube服务器)。

千面视频动捕
千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。

千面视频动捕27
查看详情 千面视频动捕

安全性和隐私方面也让我安心不少。减少了与外部服务的直接连接,就减少了潜在的攻击面,也降低了第三方服务追踪我网站访客的可能性。对于一些对GDPR或CCPA有合规要求的网站,这是一个很重要的考虑因素。

但“坑”也确实存在。最大的一个“坑”就是便利性大大降低了。以前我只要把链接一贴,WordPress自动搞定。现在呢?我得去目标网站找到嵌入代码,复制粘贴,有时候还得调整一下参数。对于那些习惯了“傻瓜式”操作的编辑来说,这无疑增加了他们的工作量和学习成本。我甚至遇到过一些非技术同事,他们就搞不懂为什么现在链接贴进去不再自动显示视频了,还得我花时间去解释和教他们如何手动嵌入。

另一个潜在的“坑”是对现有内容的兼容性。如果你在禁用oEmbed之前,网站上已经有很多通过自动嵌入方式添加的内容,那么禁用后,这些内容可能就无法正常显示了,会变成一堆纯文本链接。所以,在禁用之前,最好先备份数据库,然后对现有内容进行一次检查和修复,这可能需要一些时间,或者需要编写一个脚本来批量处理。我通常会建议大家先在一个测试环境里操作,确保没问题了再上线。

总的来说,禁用oEmbed是一个权衡利弊的过程。如果你对网站性能、安全性、控制力有较高要求,并且不介意为此付出一些操作上的“不便”,那么这个“甜头”会让你觉得很值得。但如果你只是想快速搭建一个内容丰富的网站,且对上述要求不是特别敏感,那么保持默认的oEmbed功能也未尝不可。

既然关闭了自动嵌入,那还有哪些“高级”方法可以实现内容的嵌入呢?

关闭了WordPress的自动嵌入(oEmbed)功能后,我们确实失去了那种“一键粘贴”的便利,但这并不意味着我们从此就不能嵌入外部内容了。相反,这反而给了我们更多“高级”且可控的嵌入方式,让网站在性能、隐私和自定义方面表现更好。我个人在不同的项目中,会根据具体需求选择以下几种方法:

首先,最直接也最原始的方式就是手动

<iframe>
登录后复制
嵌入。这是Web标准中用于嵌入外部内容的标签。比如YouTube视频,你可以在视频页面找到“分享”选项,里面通常会有一个“嵌入”或“Embed”按钮,点击后会提供一段
<iframe>
登录后复制
代码。把这段代码复制到WordPress编辑器的“代码编辑”模式(或者古腾堡块的“自定义HTML”块)中,就能实现嵌入。这种方式的好处是你可以直接修改
<iframe>
登录后复制
的各种属性,比如
width
登录后复制
height
登录后复制
、`
frameborder
登录后复制
,甚至添加
loading="lazy"
登录后复制
来实现图片或视频的懒加载,这对于提升页面性能非常有帮助。我经常会用这种方式来嵌入一些不常见的外部服务内容。

其次,利用WordPress的短代码(Shortcode)机制。这是一种非常强大的方式,尤其适合那些需要频繁嵌入某种特定外部内容的场景。你可以自己编写一个自定义短代码,比如

[my_youtube id="视频ID"]
登录后复制
。当WordPress解析到这个短代码时,它会执行你预设的PHP函数,生成一段优化的HTML代码来嵌入视频。这个PHP函数可以非常智能,比如:

  • 懒加载优化: 只显示视频的缩略图,用户点击后才加载真实的YouTube播放器。这能显著减少页面初始加载时的资源消耗。
  • 隐私增强: 使用
    youtube-nocookie.com
    登录后复制
    域名来嵌入YouTube视频,减少用户被追踪的可能性。
  • 自定义样式: 你可以为生成的嵌入内容添加特定的CSS类,从而完全控制其外观。
  • 参数化控制: 短代码可以接受各种参数,比如
    [my_youtube id="视频ID" width="600" height="400" autoplay="true"]
    登录后复制
    ,让内容创作者在方便的同时,仍能保持高度的灵活性。 虽然编写短代码需要一些PHP知识,但一旦设置好,对内容编辑来说,其便利性不亚于甚至超越了原生的oEmbed。

再来,使用专门的嵌入插件。市面上有很多WordPress插件专门用于处理特定类型的嵌入内容,比如:

  • 视频懒加载插件: 像“WP YouTube Lyte”这样的插件,它们的目的就是为了优化YouTube视频的加载,通常会用缩略图替代原始播放器,只在用户点击时才加载视频。
  • 社交媒体嵌入插件: 有些插件提供更强大、更可控的社交媒体内容嵌入功能,比如可以缓存推文内容,避免每次都向Twitter API发出请求。 这些插件往往在性能和自定义方面做得比WordPress原生oEmbed更好,而且通常提供了友好的用户界面,让非技术用户也能轻松操作。

最后,对于一些特别注重性能和自主性的项目,我甚至会考虑自托管媒体。比如,如果视频文件不是特别大,或者对视频播放有非常特殊的需求,我会选择将视频文件上传到自己的服务器或专业的CDN服务上,然后使用HTML5的

<video>
登录后复制
标签来播放。这样可以完全避免与第三方视频平台的交互,完全掌控视频的加载、播放和样式。当然,这会增加服务器存储和带宽的成本,但换来的是极致的控制权和性能优化。

所以你看,关闭oEmbed并非是走向“闭塞”,而是在打开了更多可能性的大门。它迫使我们去思考如何更优雅、更高效地处理外部内容,最终为网站带来更好的性能、更强的控制力和更佳的用户体验。

以上就是WordPress自动嵌入是什么?怎样关闭自动嵌入?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号