禁用WordPress嵌入功能以提升WordPress性能插图

在Web性能方面,任何优化都不会太小。随着时间的推移,许多这些小技巧和优化可以开始减少相当多的整体加载时间。在此前,我们分享了如何在WordPress中禁用表情符号。今天我们想与您分享如何在WordPress中禁用嵌入。

当他们发布WordPress 4.4时,他们将oEmbed功能合并到核心中。您之前可能已经看到或使用过它。这允许用户只需粘贴URL即可在其网站上嵌入YouTube视频、推文和许多其他资源,WordPress会自动将其转换为嵌入内容,并在可视化编辑器中提供实时预览。例如,我们从Twitter粘贴了这个URL:https://twitter.com/kinsta/status/760489262127120385,它被转换成你在下面看到的。您可以查看官方支持的嵌入类型列表。

禁用WordPress嵌入功能以提升WordPress性能插图1

嵌入Tweet推文

WordPress长期以来一直是oEmbed消费者,但随着更新,WordPress 本身成为oEmbed提供者。此功能对很多人都很有用,您可能希望保持启用状态。但是,这意味着它现在还会在您的WordPress站点上生成一个额外的HTTP请求来加载wp-embed.min.js文件。这会加载到每个页面上。虽然这个文件只有1.7KB,但这些东西会随着时间的推移而增加。请求本身有时比内容下载大小更重要。

禁用WordPress嵌入功能以提升WordPress性能插图2

wp-embed.min.js

在WordPress中禁用嵌入

有几种不同的方法可以在WordPress中禁用嵌入。您可以使用免费插件、代码或内联缩小的JS来实现。

  • 插件禁用嵌入
  • 代码禁用嵌入
  • 内联缩小的JS

1. 使用插件禁用WordPress嵌入

禁用嵌入的第一种方法是简单地使用一个名为Disable Embeds的免费插件,该插件由Pascal Birchler开发,  他实际上是WordPress的核心贡献者之一。

禁用WordPress嵌入功能以提升WordPress性能插图3

Disable embeds插件

这个插件超级轻量级​​,准确地说只有3KB。在撰写本文时,它目前有超过20,000 次活跃安装。您可以从WordPress插件库下载它 ,也可以在WordPress仪表盘中的“插件-安装插件”下搜索它。无需配置,只需安装、激活,额外的JavaScript文件就会消失。具有以下特点:

  • 防止其他人嵌入您的网站。
  • 防止您嵌入其他未列入白名单的网站。
  • 禁止在您的WordPress网站上加载JavaScript文件。

您仍然可以使用YouTube和Twitter的嵌入iframe脚本嵌入内容。您还可以使用像perfmatters这样的高级插件,它允许您禁用嵌入以及对WordPress网站的其他优化。

禁用WordPress嵌入功能以提升WordPress性能插图4

使用perfmatters插件禁用嵌入

2. 使用代码禁用WordPress嵌入

如果您不想安装其他插件,您也可以使用代码禁用嵌入。首先创建网站备份,然后,将以下内容添加到您的主题的functions.php文件中。注意:代码来自上面的Disable Embeds插件。

重要的!如果操作不当,编辑WordPress主题的源代码可能会破坏您的网站。也就是为什么要先备份后改代码!

function disable_embeds_code_init() {

 // Remove the REST API endpoint.
 remove_action( 'rest_api_init', 'wp_oembed_register_route' );

 // Turn off oEmbed auto discovery.
 add_filter( 'embed_oembed_discover', '__return_false' );

 // Don't filter oEmbed results.
 remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );

 // Remove oEmbed discovery links.
 remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );

 // Remove oEmbed-specific JavaScript from the front-end and back-end.
 remove_action( 'wp_head', 'wp_oembed_add_host_js' );
 add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin' );

 // Remove all embeds rewrite rules.
 add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

 // Remove filter of the oEmbed result before any HTTP requests are made.
 remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
}

add_action( 'init', 'disable_embeds_code_init', 9999 );

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;
}

或者您也可以使用wp_dequeue_script函数。

function my_deregister_scripts(){
 wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'my_deregister_scripts' );

3. 内联缩小的JS

第三种选择是获取wp-embed.min.js文件的内容并将其嵌入内联。这应该只在小文件或不涉及太多代码的情况下完成。如果您只是想摆脱HTTP请求,但仍保留对嵌入的支持,那就是这种情况。