You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

457 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
/**
* WordPress 清理和优化功能
* 包含头像替换、自动更新禁用、冗余代码移除等功能
*/
// 防止直接访问
if (!defined('ABSPATH')) {
exit;
}
/**
* 替换 Gravatar 头像为 V2EX CDN
*/
function replace_gravatar($avatar) {
$avatar = str_replace(array(
"//gravatar.com/",
"//secure.gravatar.com/",
"//www.gravatar.com/",
"//0.gravatar.com/",
"//1.gravatar.com/",
"//2.gravatar.com/",
"//cn.gravatar.com/"
), "//cdn.v2ex.com/gr", $avatar);
return $avatar;
}
add_filter('get_avatar', 'replace_gravatar');
/**
* 修复 WordPress 上 Cravatar 头像无法显示问题
*/
if (!function_exists('get_cravatar_url')) {
function get_cravatar_url($url) {
$sources = array(
'www.gravatar.com',
'0.gravatar.com',
'1.gravatar.com',
'2.gravatar.com',
'secure.gravatar.com',
'cn.gravatar.com'
);
return str_replace($sources, 'cravatar.cn', $url);
}
add_filter('um_user_avatar_url_filter', 'get_cravatar_url', 1);
add_filter('bp_gravatar_url', 'get_cravatar_url', 1);
add_filter('get_avatar_url', 'get_cravatar_url', 1);
}
/**
* 文章插入图片自动移除 img 的 width、height、class 属性
*/
function fanly_remove_images_attribute($html) {
$html = preg_replace('/width="(\d*)"\s+height="(\d*)"\s+class="[^"]*"/', "", $html);
$html = preg_replace('/ /', "", $html);
return $html;
}
add_filter('post_thumbnail_html', 'fanly_remove_images_attribute', 10);
add_filter('image_send_to_editor', 'fanly_remove_images_attribute', 10);
/**
* 移动设备自适应图片删除 width 和 height 属性
*/
function ludou_remove_width_height_attribute($content) {
preg_match_all('/<[img|IMG].*?src=[\'"](.+?(?:[\.+gif|\.+jpg|\.+png\.webp]))[\'"].*?[\/]?>/', $content, $images);
if (!empty($images) && is_array($images) && isset($images[0]) && is_array($images[0]) && !empty($images[0])) {
foreach ($images[0] as $index => $value) {
if (isset($images[0][$index]) && is_string($images[0][$index])) {
$new_img = preg_replace('/(width|height)="\d*"\s/', "", $images[0][$index]);
$content = str_replace($images[0][$index], $new_img, $content);
}
}
}
return $content;
}
// 判断是否是移动设备浏览
if (wp_is_mobile()) {
add_filter('the_content', 'ludou_remove_width_height_attribute', 99);
}
/**
* 彻底关闭自动更新(核心程序/主题/插件/翻译自动更新)
*/
add_filter('automatic_updater_disabled', '__return_true');
// 关闭更新检查定时作业
remove_action('init', 'wp_schedule_update_checks');
// 移除已有的版本检查定时作业
wp_clear_scheduled_hook('wp_version_check');
wp_clear_scheduled_hook('wp_update_plugins');
wp_clear_scheduled_hook('wp_update_themes');
wp_clear_scheduled_hook('wp_maybe_auto_update');
// 移除后台内核更新检查
remove_action('admin_init', '_maybe_update_core');
// 移除后台插件更新检查
remove_action('load-plugins.php', 'wp_update_plugins');
remove_action('load-update.php', 'wp_update_plugins');
remove_action('load-update-core.php', 'wp_update_plugins');
remove_action('admin_init', '_maybe_update_plugins');
// 移除后台主题更新检查
remove_action('load-themes.php', 'wp_update_themes');
remove_action('load-update.php', 'wp_update_themes');
remove_action('load-update-core.php', 'wp_update_themes');
remove_action('admin_init', '_maybe_update_themes');
// 关闭程序更新提示
add_filter('pre_site_transient_update_core', function($a) { return null; });
add_filter('pre_site_transient_update_plugins', function($a) { return null; });
add_filter('pre_site_transient_update_themes', function($a) { return null; });
/**
* 关闭 WordPress 的 XML-RPC 功能
*/
add_filter('xmlrpc_enabled', '__return_false');
/**
* 关闭 XML-RPC 的 pingback 端口
*/
function remove_xmlrpc_pingback_ping($methods) {
// 确保 $methods 是数组
if (!is_array($methods)) {
return $methods;
}
unset($methods['pingback.ping']);
return $methods;
}
add_filter('xmlrpc_methods', 'remove_xmlrpc_pingback_ping');
/**
* 移除前端网页源代码内的头部冗余代码
*/
remove_action('wp_head', 'feed_links_extra', 3);
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'start_post_rel_link', 10, 0);
remove_action('wp_head', 'wp_generator');
/**
* 禁止新版文章编辑器加载前端样式
*/
function wpassist_remove_block_library_css() {
wp_dequeue_style('wp-block-library');
wp_dequeue_style('wp-block-library-theme');
wp_dequeue_style('wc-block-style'); // WooCommerce
wp_dequeue_style('global-styles'); // WordPress 5.9+
}
add_action('wp_enqueue_scripts', 'wpassist_remove_block_library_css', 100);
/**
* 移除前后台顶部工具栏指定菜单
*/
function admin_bar_item(WP_Admin_Bar $admin_bar) {
$admin_bar->remove_menu('wp-logo'); // 移除 wp 的 logo
$admin_bar->remove_menu('updates'); // 移除更新提示
$admin_bar->remove_menu('comments'); // 移除评论提示
}
add_action('admin_bar_menu', 'admin_bar_item', 500);
/**
* 移除后台仪表盘菜单:活动、新闻
*/
function bzg_remove_dashboard_widgets() {
global $wp_meta_boxes;
// 确保 $wp_meta_boxes 是数组且包含必要的键
if (!is_array($wp_meta_boxes)) {
return;
}
// 安全地移除 "活动"
if (isset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity'])) {
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity']);
}
// 安全地移除 "WordPress 新闻"
if (isset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'])) {
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
}
}
add_action('wp_dashboard_setup', 'bzg_remove_dashboard_widgets');
/**
* 移除 login 页面的版权信息
*/
function yqd_login_logo_url() {
return home_url();
}
add_filter('login_headerurl', 'yqd_login_logo_url');
/**
* 自定义登录页面logo
*/
function custom_login_logo() {
echo '<style type="text/css">
#login h1 a {
background-image: url(' . get_template_directory_uri() . '/assets/images/logo.svg) !important;
background-size: contain !important;
background-repeat: no-repeat !important;
background-position: center !important;
width: 200px !important;
height: 80px !important;
margin: 0 auto 25px !important;
}
</style>';
}
add_action('login_enqueue_scripts', 'custom_login_logo');
/**
* 自定义登录页面logo标题
*/
function custom_login_logo_title() {
return get_bloginfo('name');
}
add_filter('login_headertitle', 'custom_login_logo_title');
/**
* 删除 WordPress 后台底部版权信息
*/
function _admin_footer_right_text($text) {
$text = '';
return $text;
}
add_filter('update_footer', '_admin_footer_right_text', 11);
/**
* 移除后台仪表盘菜单:帮助
*/
function bzg_remove_help() {
$screen = get_current_screen();
if ($screen && method_exists($screen, 'remove_help_tabs')) {
$screen->remove_help_tabs();
}
}
add_action('admin_head', 'bzg_remove_help');
/**
* 禁用 pingbacks, enclosures, trackbacks
*/
remove_action('do_pings', 'do_all_pings', 10);
remove_action('publish_post', '_publish_post_hook', 5);
/**
* 禁止加载 s.w.org 获取表情和头像
*/
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('admin_print_styles', 'print_emoji_styles');
/**
* 移除 DNS 预取
*/
function remove_dns_prefetch($hints, $relation_type) {
// 确保 $hints 是数组
if (!is_array($hints)) {
return $hints;
}
if ('dns-prefetch' === $relation_type) {
$unique_hosts = wp_dependencies_unique_hosts();
if (is_array($unique_hosts)) {
return array_diff($hints, $unique_hosts);
}
}
return $hints;
}
add_filter('wp_resource_hints', 'remove_dns_prefetch', 10, 2);
/**
* 替换评论用户头像链接为国内镜像加速源访问
*/
add_filter('get_avatar', function ($avatar) {
return str_replace([
'www.gravatar.com/avatar/',
'0.gravatar.com/avatar/',
'1.gravatar.com/avatar/',
'2.gravatar.com/avatar/',
'secure.gravatar.com/avatar/',
'cn.gravatar.com/avatar/'
], 'cravatar.cn/', $avatar);
});
/**
* 禁止查询网站静态资源连接版本字符
*/
function _remove_script_version($src) {
$parts = explode('?', $src);
return $parts[0];
}
add_filter('script_loader_src', '_remove_script_version', 15, 1);
add_filter('style_loader_src', '_remove_script_version', 15, 1);
/**
* 支持 WebP 格式
*/
function add_webp_mime_type($mimes) {
$mimes['webp'] = 'image/webp';
return $mimes;
}
add_filter('mime_types', 'add_webp_mime_type');
/**
* 支持 SVG 格式
*/
function add_svg_mime_type($mimes) {
$mimes['svg'] = 'image/svg+xml';
return $mimes;
}
add_filter('upload_mimes', 'add_svg_mime_type');
/**
* 优化CSS加载 - 延迟加载非关键CSS
*/
function optimize_css_loading() {
// 仅在前端执行
if (is_admin()) {
return;
}
// 延迟加载非关键CSS
add_filter('style_loader_tag', function($html, $handle, $href, $media) {
// 定义非关键CSS样式表
$non_critical_styles = array(
'wp-block-library',
'wp-block-library-theme',
'wc-block-style',
'global-styles'
);
if (in_array($handle, $non_critical_styles)) {
// 使用preload + onload技术延迟加载
$html = str_replace("rel='stylesheet'", "rel='preload' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"", $html);
// 添加noscript fallback
$html .= '<noscript>' . str_replace("rel='preload' as='style' onload=\"this.onload=null;this.rel='stylesheet'\"", "rel='stylesheet'", $html) . '</noscript>';
}
return $html;
}, 10, 4);
}
add_action('wp_enqueue_scripts', 'optimize_css_loading', 1);
/**
* 优化JavaScript加载
*/
function optimize_js_loading() {
// 仅在前端执行
if (is_admin()) {
return;
}
// 为非关键JS添加defer属性
add_filter('script_loader_tag', function($tag, $handle, $src) {
// 定义需要defer的脚本
$defer_scripts = array(
'jquery-migrate',
'wp-embed',
'comment-reply'
);
if (in_array($handle, $defer_scripts)) {
return str_replace(' src', ' defer src', $tag);
}
return $tag;
}, 10, 3);
}
add_action('wp_enqueue_scripts', 'optimize_js_loading', 1);
/**
* 移除不必要的CSS和JS
*/
function remove_unnecessary_assets() {
// 仅在前端执行
if (is_admin()) {
return;
}
// 移除WordPress默认样式
wp_dequeue_style('dashicons'); // 仅后台需要
// 移除不必要的JS
wp_dequeue_script('wp-embed');
// 如果不使用评论功能,移除评论相关脚本
if (!is_single() && !is_page()) {
wp_dequeue_script('comment-reply');
}
}
add_action('wp_enqueue_scripts', 'remove_unnecessary_assets', 100);
/**
* 添加关键CSS内联
*/
function add_critical_css() {
// 仅在前端执行
if (is_admin()) {
return;
}
// 添加关键CSS到head中
echo '<style id="critical-css">';
echo 'body{margin:0;padding:0;font-family:sans-serif;}';
echo '.site-header{position:relative;z-index:999;}';
echo '.main-content{min-height:50vh;}';
echo '</style>';
}
add_action('wp_head', 'add_critical_css', 1);
/**
* 优化资源提示
*/
function add_resource_hints() {
// 仅在前端执行
if (is_admin()) {
return;
}
// 添加DNS预连接
echo '<link rel="preconnect" href="//fonts.googleapis.com" crossorigin>';
echo '<link rel="preconnect" href="//cdn.v2ex.com" crossorigin>';
echo '<link rel="preconnect" href="//cravatar.cn" crossorigin>';
}
add_action('wp_head', 'add_resource_hints', 1);
/**
* 压缩HTML输出
*/
function compress_html_output($buffer) {
// 仅在前端压缩
if (is_admin()) {
return $buffer;
}
// 移除HTML注释保留IE条件注释
$buffer = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $buffer);
// 移除多余的空白字符
$buffer = preg_replace('/\s+/', ' ', $buffer);
// 移除行首行尾空白
$buffer = preg_replace('/^\s+|\s+$/m', '', $buffer);
return $buffer;
}
// 启用HTML压缩可选可能影响某些插件
// add_action('template_redirect', function() {
// if (!is_admin()) {
// ob_start('compress_html_output');
// }
// });