用了这么久的Wordpress,之前优化都是乱七八糟的弄下,最近因为有个网站是给纯小白使用的,用到了很多之前没有自己用的优化代码,所以就整理下吧,当然我这个博客国内用户访问并不快,毕竟服务器基础不行,也是用的Cloudflare优化规则。
在有条件的情况下,最好把服务器网站环境配置达到:
Linux系统:nginx、php7.2起步、mysql8.0、Memcached、opcache,建议php7.3,因为这个版本升级了新版本的Opcache支持。
另外数据库结构选择InnoDB,至于为什么选择,之后我会单独说下。
(如果你流量不大,追求稳定也可以用apache,不过大部分网站其实区别不大,现在还是用nginx的更多)。
静态:图片、js、css上cdn,cdn也是大学问,很多人配置cdn就是连接就行了,都不去配置cdn的功能等。cdn也得根据网站程序,网站对外提供等用途配置缓存等,提高命中率。
当然最重要的是服务器配置了,不考虑钱的基础下就买高配高带宽就行了。如果预算低就选低配,然后动手优化速度吧。
WordPress的优化也和自己用到的主题有关系,有的主题自带了很多优化速度的功能,还有的插件的高级版也自带本地化功能。
好了,现在开始说Wordpress优化小总结,以下不考虑主题。很多代码来自很多插件的分解或者其他网站,有的代码很老了,已经修改到支持wp5。也很多优秀的优化插件,如果你不喜欢用插件就看下面的吧,如果喜欢用插件就在后台搜索优化插件安装就行。
如果不熟悉代码,请使用插件,我推荐WP Rocket(不缺钱考虑)或者WP Super Cache(不出钱考虑),很多插件功能很强大的,还更新快。当然就算用了以下代码,我还是推荐搭配Autoptimize插件,但是这个插件可能和你的主题或者其他插件冲突,造成无法正常显示,所以一点点测试就行。
以下代码按需测试使用,因为有的主题自带了,大部分都和主题有关,自行测试就好。
网站速度测试:
https://developers.google.com/speed/pagespeed/insights/?hl=zh-cn&url=
本文最后更新时间:2022年10月29日。
1:使用Memcached减少数据库查询:WordPress 速度优化之Memcached- 1、使用Opcache、Memcached,但是上面文章的代码,可能不兼容你的PHP版本,可以用Docket Cache插件(前提你服务器配置高硬盘大)
- 2、使用PHP7.2+、mysql8.0+版本以上(服务器条件允许)
总结代码,按需来,不能直接使用!不能直接使用!不能直接使用!
我自己有的优化也没加上,根据自己主题、网站的实际情况来!
<?php
/*
Plugin Name: WordPress优化
Plugin URI: https://www.jingxialai.com/2402.html
Description: WordPress本土优化,可能有兼容问题,所以具体根据自己的主题来。
Version: 2.0
Author: jingxialai
Author URI: https://www.jingxialai.com/2402.html
*/
//移除谷歌字体(国内主题一般默认不用谷歌字体)
if (!function_exists('remove_wp_open_sans')) :
function remove_wp_open_sans() {
wp_deregister_style( 'open-sans' );
wp_register_style( 'open-sans', false );
}
// 前台删除Google字体CSS
add_action('wp_enqueue_scripts', 'remove_wp_open_sans');
// 后台删除Google字体CSS
add_action('admin_enqueue_scripts', 'remove_wp_open_sans');
endif;
//删除emoji表情脚本
remove_action('admin_print_scripts', 'print_emoji_detection_script');
remove_action('admin_print_styles', 'print_emoji_styles');
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('embed_head', 'print_emoji_detection_script');
remove_filter('the_content_feed', 'wp_staticize_emoji');
remove_filter('comment_text_rss', 'wp_staticize_emoji');
remove_filter('wp_mail', 'wp_staticize_emoji_for_email');
//页面链接添加html后缀(有的主题默认)
add_action('init', 'html_page_permalink', -1);
function html_page_permalink() {
global $wp_rewrite;
if ( !strpos($wp_rewrite->get_page_permastruct(), '.html')) {
$wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}
}
//禁用XML-RPC(第三方接口,最好把xmlrpc.php文件里面的代码清空,保留个空文件)
add_filter('xmlrpc_enabled', '__return_false');
add_filter('xmlrpc_methods', '__return_empty_array');
//禁用REST API(有的主题以及小程序app需要调用)
add_filter('rest_enabled', '_return_false');
add_filter('rest_jsonp_enabled', '_return_false');
add_filter( 'rest_authentication_errors', function( $access ) {
return new WP_Error( 'rest_cannot_acess', 'REST API已关闭', array( 'status' => 403 ) );
});
//禁止加载wp-embed.min.js(有的主题需要调用)
function my_deregister_scripts(){
wp_dequeue_script( 'wp-embed' );
}
add_action( 'wp_footer', 'my_deregister_scripts' );
//除后台之外删除静态资源的查询字符串
function j_remove_script_version( $src ) {
$parts = explode( '?ver', $src );
return $parts[0];
}
add_filter( 'script_loader_src', 'j_remove_script_version', 15, 1 );
add_filter( 'style_loader_src', 'j_remove_script_version', 15, 1 );
//禁用feed
function disable_feed() {
wp_die( '本站不提供feed。<script>location.href="'.bloginfo('url').'";</script>' );
}
add_action('do_feed', 'disable_feed', 1);
add_action('do_feed_rdf', 'disable_feed', 1);
add_action('do_feed_rss', 'disable_feed', 1);
add_action('do_feed_rss2', 'disable_feed', 1);
add_action('do_feed_atom', 'disable_feed', 1);
//12取消内容转义
$qmr_work_tags = array(
'the_title', // 标题
'the_content', // 内容 *
'the_excerpt', // 摘要 *
'single_post_title', // 单篇文章标题
'comment_author', // 评论作者
'comment_text', // 评论内容 *
'bloginfo', // 博客信息
'wp_title', // 网站标题
'term_description', // 项目描述
'category_description', // 分类描述
'widget_title', // 小工具标题
'widget_text' // 小工具文本
);
foreach ( $qmr_work_tags as $qmr_work_tag ) {
remove_filter ($qmr_work_tag, 'wptexturize');
}
/*整体移除页面还会显示的*/
//移除 REST API 端点
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
//移除AutoEmbeds镶嵌
remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
//移除oEmbed自动发现功能
add_filter( 'embed_oembed_discover', '__return_false' );
//移除oEmbed结果
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
//移除oEmbed发现链接
remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );
//移除oEmbed使用的JavaScript 文件
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
//移除json连接加载
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
//remove_action('wp_head', 'rest_output_link_wp_head');
remove_action('template_redirect', 'rest_output_link_header');
//移除WordPress版本
remove_action( 'wp_head', 'wp_generator' );
//移除分类等feed
remove_action( 'wp_head', 'feed_links_extra', 3 );
//移除文章和评论feed
remove_action( 'wp_head', 'feed_links', 2 );
//屏蔽API产生的信息
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
//屏蔽rel=shortlink信息
remove_action( 'template_redirect','wp_shortlink_header', 11, 0);
//移除ShortLink
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
//移除rsd链接,不用XML-RPC接口可以关闭输出
remove_action( 'wp_head', 'rsd_link' );
//移除dns-prefetch
remove_action('wp_head', 'wp_resource_hints', 2);
//移除wlwmanifest(Windows Live Writer接口)
remove_action( 'wp_head', 'wlwmanifest_link' );
//移除当前页面的索引
remove_action( 'wp_head', 'index_rel_link' );
//移除后面文章的url
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
//移除最开始文章的url
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
//移除前后文meta信息
remove_action('wp_head', 'adjacent_posts_rel_link_wp_head');
//移除相邻文章的url
remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 );
//移除检查当前页面的检测(以下也可以不用加)
remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);
remove_filter('oembed_response_data', 'get_oembed_response_data_rich', 10, 4);
//移除古腾堡编辑器样式block-library CSS
function remove_block_library_css() {
wp_dequeue_style( 'wp-block-library' );
}
add_action( 'wp_enqueue_scripts', 'remove_block_library_css', 100 );
//移除pingbacks, enclosures, trackbacks
remove_action('do_pings', 'do_all_pings');
//移除_encloseme 和 do_ping 操作。
remove_action('publish_post', '_publish_post_hook');
//彻底禁用Pingback与Trackback
add_filter('wp_headers', function($headers, $wp_query){
if(isset($headers['X-Pingback'])){
unset($headers['X-Pingback']);
}
return $headers;
}, 11, 2);
add_filter('pre_option_enable_xmlrpc', function($state){
return '0';
});
add_action('wp', function(){
remove_action('wp_head', 'rsd_link');
}, 9);
add_filter('bloginfo_url', function($output, $property){
return ($property == 'pingback_url') ? null : $output;
}, 11, 2);
add_action('xmlrpc_call', function($method){
if($method != 'pingback.ping') return;
wp_die(
'Pingback functionality is disabled on this Blog.',
'Pingback Disabled!',
array('response' => 403)
);
});
//禁止current_screen
add_filter('current_screen', '__return_false', 1);
//禁止translations_api
add_filter('translations_api', '__return_true', 1);
//禁止wp_check_browser_version
add_filter('wp_check_browser_version', '__return_false', 1);
//禁止wp_check_php_version
add_filter('pre_site_transient_{$transient}', '__return_true', 1);
//禁用后台登录页语言切换
add_filter( 'login_display_language_dropdown', '__return_false' );
/*整体移除页面还会显示的 结束*/
//禁止谷歌地图(国外主题多)
//add_filter( 'avf_load_google_map_api', '__return_false' );
//禁止每个页面加载Contact Form7(表单)
//add_filter( 'wpcf7_load_js', '__return_false' );
//add_filter( 'wpcf7_load_css', '__return_false' );
/*//禁用Heartbeat API(自动存储草稿,每隔15秒向服务器发送ajax调用,如果出错可以删掉,建议保留)
add_action( 'init', 'stop_heartbeat', 1 );
function stop_heartbeat() {
wp_deregister_script('heartbeat');
}*/
// 只为已登录用户加载dashicons
add_action( 'wp_enqueue_scripts', 'bs_dequeue_dashicons' );
function bs_dequeue_dashicons() {
if ( ! is_user_logged_in() ) {
wp_deregister_style( 'dashicons' );
}
}
/*//禁用Gutenberg编辑器(看个人习惯,我个人博客在用,更建议用官方插件)
add_filter('use_block_editor_for_post', '__return_false');
remove_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' );
add_filter( 'use_widgets_block_editor', '__return_false' );
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false', 100 );
//禁用小工具区块编辑模式
add_filter( 'gutenberg_use_widgets_block_editor', '__return_false' );
add_filter( 'use_widgets_block_editor', '__return_false' );
*/
//禁用版本修订(放到wp-config)
define('WP_POST_REVISIONS', false);
//如果这句加进去还有其他不连贯,可以用下面的
/*彻底关闭修订版本(id不连贯) 开始*/
function keep_id_continuous(){
global $wpdb;
//删掉自动草稿和修订版
$wpdb->query("DELETE FROM `$wpdb->posts` WHERE `post_status` = 'auto-draft' OR `post_type` = 'revision'");
//自增值小于现有最大ID,MySQL会自动设置正确的自增值
$wpdb->query("ALTER TABLE `$wpdb->posts` AUTO_INCREMENT = 1");
}
//将函数钩在新建文章、上传媒体和自定义菜单之前。
add_filter( 'load-post-new.php', 'keep_id_continuous' );
add_filter( 'load-media-new.php', 'keep_id_continuous' );
add_filter( 'load-nav-menus.php', 'keep_id_continuous' );
//禁用文章自动保存
add_action('wp_print_scripts','fanly_no_autosave');
function fanly_no_autosave(){
wp_deregister_script('autosave');
}
//禁用文章修订版本
add_filter( 'wp_revisions_to_keep', 'fanly_wp_revisions_to_keep', 10, 2 );
function fanly_wp_revisions_to_keep( $num, $post ) { return 0;}
/*彻底修订版本(id不连贯) 结束*/
//禁止图片超过2500像素压缩
add_filter('big_image_size_threshold', '__return_false');
//禁止响应式图片
function disable_srcset( $sources ) {
return false;
}
add_filter( 'wp_calculate_image_srcset', 'disable_srcset' );
//禁止自动生成图片尺寸
function shapeSpace_disable_image_sizes($sizes) {
unset($sizes['thumbnail']); // disable thumbnail size
unset($sizes['medium']); // disable medium size
unset($sizes['large']); // disable large size
unset($sizes['medium_large']); // disable medium-large size
unset($sizes['1536x1536']); // disable 2x medium-large size
unset($sizes['2048x2048']); // disable 2x large size
return $sizes;
}
add_action('intermediate_image_sizes_advanced', 'shapeSpace_disable_image_sizes');
//禁止其他图片尺寸
function shapeSpace_disable_other_image_sizes() {
remove_image_size('post-thumbnail'); // disable images added via set_post_thumbnail_size()
remove_image_size('another-size'); // disable any other added image sizes
}
add_action('init', 'shapeSpace_disable_other_image_sizes');
//禁止Wordpress邮箱管理员验证
add_filter('admin_email_check_interval', '__return_false');
//重定向?author
add_action('template_redirect', 'disableAuthorUrl');
function disableAuthorUrl(){
if (is_author())) {
wp_redirect(home_url());
exit();
}
}
//移除comment-reply.min.js(如果不用评论)
function crunchify_clean_header_hook() {
wp_deregister_script( 'comment-reply' );
}
add_action('init','crunchify_clean_header_hook');
//15移除jquery-migrate.min.js(兼容老jquery库,有的主题默认不启用)
function isa_remove_jquery_migrate( &$scripts ) {
if( !is_admin() ) {
$scripts->remove( 'jquery' );
$scripts->add( 'jquery', false, array( 'jquery-core' ), '1.12.4' );
}
}
add_filter( 'wp_default_scripts', 'isa_remove_jquery_migrate' );
//16禁用cron(定时任务,放到wp-config.php)
define('DISABLE_WP_CRON', 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');
//自动给图片加上alt/title
function content_img_add_alt_title($content)
{
global $post;
preg_match_all('/<img (.*?)\/>/', $content, $images);
if (!is_null($images)) {
foreach ($images[1] as $index => $value) {
$new_img = str_replace('<img', '<img title=' . $post->post_title . '
alt=' . $post->post_title, $images[0][$index]);
$content = str_replace($images[0][$index], $new_img, $content);
}
}
return $content;
}
add_filter('the_content', 'content_img_add_alt_title', 99);
//19-删除XFN (XHTML Friends Network) Profile 链接 和 Pingback URL
<link rel="profile" href="http://gmpg.org/xfn/11">
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">
//找到header.php删了就行
/*后台优化*/
//禁用后台右上角帮助
add_action('in_admin_header', function(){
global $current_screen;
$current_screen->remove_help_tabs();
});
//禁用后台右上角选项
add_action('in_admin_header', function(){
add_filter('screen_options_show_screen', '__return_false');
add_filter('hidden_columns', '__return_empty_array');
});
//禁用Admin Bar(登录之后顶部栏)
add_filter( 'show_admin_bar', '__return_false' );
//屏蔽后台页脚WordPress版本信息
function change_footer_admin () {return '';}
add_filter('admin_footer_text', 'change_footer_admin', 9999);
function change_footer_version() {return '';}
add_filter( 'update_footer', 'change_footer_version', 9999);
//隐藏后台标题中的“—— WordPress”
add_filter('admin_title', 'zm_custom_admin_title', 10, 2);
function zm_custom_admin_title($admin_title, $title){
return $title.' ‹ '.get_bloginfo('name');
}
//隐藏登录页面标题中的“WordPress”
add_filter('login_title', 'zm_custom_login_title', 10, 2);
function zm_custom_login_title($login_title, $title){
return $title.' ‹ '.get_bloginfo('name');
}
//隐藏左上角WordPress标志
function hidden_admin_bar_remove() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('wp-logo');
}
add_action('wp_before_admin_bar_render', 'hidden_admin_bar_remove', 0);
//27隐藏后台状态
function disable_dashboard_widgets() {
remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
//近期评论
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'normal');
//近期草稿
remove_meta_box('dashboard_primary', 'dashboard', 'core');
//wordpress博客
remove_meta_box('dashboard_secondary', 'dashboard', 'core');
//其它新闻
remove_meta_box('dashboard_right_now', 'dashboard', 'core');
//wordpress概况
remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');
//wordresss链入链接
remove_meta_box('dashboard_plugins', 'dashboard', 'core');
//链入插件
remove_meta_box('dashboard_quick_press', 'dashboard', 'core');
//快速发布
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal');
//动态
}
add_action('admin_menu', 'disable_dashboard_widgets');
