一. 为什么要禁用WordPress部分功能
在优化 WordPress 网站速度时,一个关键的思路是:只加载你真正需要的资源。WordPress 核心、主题和插件默认会加载许多通用功能,但其中很大一部分对大多数网站来说并非必需。禁用它们,可以有效减少 HTTP 请求、压缩文件体积、降低 CPU 负载,从而显著提升页面加载速度。
以下是我整理的最值得禁用的功能及其目的:
二. 具体禁用项目
可以直接复制到子主题的functions.php文件中
2.1 禁用表情符号(Emojis)
目的:移除 WordPress 在前端加载的用于兼容老旧浏览器的表情符号脚本和样式。
- 问题:即使网站不使用表情符号,WordPress 仍会额外加载一个 JS 文件和一个 CSS 文件,增加两次不必要的 HTTP 请求。
- 好处:减少请求数,精简代码。现代浏览器已原生支持表情符号,无需这些兼容层。
/**
* 禁用 WordPress 前端加载的表情符号脚本和样式
*/
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
// 移除古腾堡编辑器中的表情符号相关脚本(可选)
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
// 移除 DNS 预获取(dns-prefetch)
add_filter('emoji_svg_url', '__return_false');2.2 禁用嵌入功能(oEmbed / Embeds)
目的:停用自动将外部链接(如 YouTube、Twitter)转换为嵌入内容的功能。
- 问题:WordPress 会加载
wp-embed.js脚本,并在头部添加相关 API 链接,即使你的网站从不嵌入外部内容。 - 好处:移除一个 JS 文件,并防止外部 API 调用,提升页面加载速度,同时增强隐私保护(不向第三方发送请求)。
/**
* 禁用 WordPress 的嵌入功能(oEmbed)
*/
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');
add_filter('embed_oembed_discover', '__return_false');
// 彻底禁用嵌入(包括 REST API 端点)
add_filter('rest_endpoints', function($endpoints) {
if (isset($endpoints['/oembed/1.0/embed'])) {
unset($endpoints['/oembed/1.0/embed']);
}
if (isset($endpoints['/oembed/1.0/proxy'])) {
unset($endpoints['/oembed/1.0/proxy']);
}
return $endpoints;
});
// 移除嵌入相关的脚本(如果主题或插件额外加载)
add_action('wp_enqueue_scripts', function() {
wp_dequeue_script('wp-embed');
}, 9999);2.3 禁用 jQuery Migrate(仅前台,保留后台兼容)
移除用于兼容老旧 jQuery 代码的迁移库。
目的:移除为了兼容为旧版 jQuery(1.x/2.x)编写的代码而加载的迁移库。
- 问题:jQuery Migrate 是一个兼容层,用于让旧代码在新版 jQuery 3.x 上继续运行。但大多数现代主题和插件已更新,不再需要它。保留它只会增加额外的 JS 文件体积。
- 好处:减少 JS 文件大小,提升执行效率。前提是确保你的主题/插件不依赖已废弃的 jQuery API(可通过测试验证)。
/**
* 在前端页面禁用 jQuery Migrate,防止加载多余的迁移脚本
* 注意:如果主题或插件依赖旧的 jQuery 写法,禁用后可能导致功能异常,请谨慎测试。
*/
add_action('wp_default_scripts', function($scripts) {
if (!is_admin() && isset($scripts->registered['jquery'])) {
$jquery = $scripts->registered['jquery'];
// 从 jquery 的依赖数组中移除 'jquery-migrate'
if (isset($jquery->deps) && in_array('jquery-migrate', $jquery->deps)) {
$jquery->deps = array_diff($jquery->deps, array('jquery-migrate'));
}
}
});2.4 移除头部冗余链接信息
清理 <head> 中无用的 RSD、WLW、Shortlink 等标签。
目的:清理 <head> 区无用的元标签和链接。
- 问题:WordPress 默认输出 RSD 链接、WLW 链接、短链接、REST API 链接、WordPress 版本号等。这些对普通访客毫无意义,却增加了 HTML 体积,且可能暴露版本信息带来安全隐患。
- 好处:净化 HTML 输出,减少代码量,隐藏版本号提高安全性。
/**
* 移除 WordPress 头部多余的链接标签
*/
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'wp_shortlink_wp_head');
remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('wp_head', 'wp_generator');2.5 禁用 REST API(非登录用户)
阻止未登录用户访问 API,减少安全风险和服务器负载。
目的:阻止未登录用户访问 WordPress REST API。
- 问题:REST API 默认公开,可能被恶意爬虫利用来获取用户信息、文章列表等数据,消耗服务器资源。
- 好处:减少服务器负载,防止信息泄露。注意:如果网站使用了依赖 REST API 的前端功能(如古腾堡编辑器、某些插件),请勿完全禁用;可仅对未登录用户禁用。
/**
* 为未登录用户禁用 WordPress REST API
*/
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_disabled', 'REST API 已对非登录用户禁用。');
}
return $result;
});2.6 禁用 XML-RPC
关闭老旧远程发布接口,有效防止暴力破解和 DDoS 攻击。
目的:关闭 WordPress 的 XML-RPC 接口。
- 问题:XML-RPC 是一个老旧远程发布协议,常被用于暴力破解和 DDoS 放大攻击(如 pingback 攻击)。绝大多数现代网站已不再需要它(除非使用 Jetpack 或手机 App 发布)。
- 好处:彻底封堵一个常见攻击入口,提升网站安全性,并减少无用的请求。
/**
* 完全禁用 XML-RPC 接口
*/
add_filter('xmlrpc_enabled', '__return_false');2.7 限制文章修订版本数量
限制或禁用修订版本,防止数据库表过度膨胀。
目的:控制 WordPress 对每次编辑自动保存的修订数量。
- 问题:每次编辑文章,WordPress 都会保存一个修订版本。长期积累下来,
wp_posts表可能膨胀到数百 MB,拖慢数据库查询,影响后台性能和备份效率。 - 好处:保持数据库清爽,提升后台响应速度。通常保留 3-5 个最新修订版本足矣。
/**
* 限制文章修订版本保存数量为 3 个
*/
define('WP_POST_REVISIONS', 3);📌 总结:优化原则
- 按需加载:只保留网站实际使用的功能。
- 减少请求:每个禁用的脚本、样式都少一次网络往返。
- 提升安全:关闭不必要的入口,降低攻击面。
- 数据库瘦身:控制修订版本,保持查询高效。
在实施前,建议在测试环境验证,确保不影响核心功能(如 WooCommerce 购物、表单提交等)。使用 Perfmatters 或 WPJAM Basic 等插件可以可视化管理这些开关,无需手动编写代码。
