WordPress移除head无用的标签和链接的方法

        WordPress 通过 wp_head() 在页面的头部输出了很多东西,但是这些标签很多是没用的或者有危害的,如:wp版本号、上下篇文章链接、以及其他一些meta元素;比如“generator” 元标记就会泄露Wordpress的版本号,如果你没用及时更新一个已经曝出有安全漏洞的版本,那黑客就能根据“generator”提供的版本号来攻击你的网站。下面小编就来介绍删除 wp_head 多余标签和元素的方法。

目录

一、前台相关

1、移除WordPress版本信息

2、去除加载的 css 和 js 后面的版本号:

3、移除Windows Live Writer

4、去除 wp-embed 功能,加快网页打开速度:

5、替换 Wordpress jquery 源为 loli.net,加快网页打开速度:

6、移除Really Simple Discovery

6、移除前后文、第一篇文章、主页meta信息

7、移除shortlink标签

8、移除feed

9、禁用embeds功能并移除wp-embed.min.js文件

10、移除WordPress头部加载DNS预获取(dns-prefetch)

11、移除emoji表情script和style

12、移除wp-json链接

13、去掉各种无用的头部输出

二、后台相关

1、关闭 wordpress 后台主题插件更新提示


一、前台相关

1、移除WordPress版本信息

WordPress自动添加版本号信息,在head区域,可以看到:

<meta name=”generator” content=”WordPress 5.8.2″>

版本号是默认添加的,但是可以被黑客利用,攻击特定版本的WordPress漏洞。

移除代码如下:

//移除WordPress版本信息
remove_action( 'wp_head', 'wp_generator' );

2、去除加载的 css 和 js 后面的版本号:

//去除加载的 css 和 js 后面的版本号:
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 );
add_filter( 'pre_option_link_manager_enabled', '__return_true' );

3、移除Windows Live Writer

Windows Live Writer在head区域输出如下:

<link rel=”wlwmanifest” type=”application/wlwmanifest+xml” href=”http://example.com/wp-includes/wlwmanifest.xml” />

移除代码:

remove_action('wp_head', 'wlwmanifest_link');

4、去除 wp-embed 功能,加快网页打开速度:

//去除 wp-embed 功能,加快网页打开速度:
remove_action('rest_api_init', 'wp_oembed_register_route');
remove_filter('rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4);
remove_filter('oembed_dataparse', 'wp_filter_oembed_result', 10 );
remove_filter('oembed_response_data',   'get_oembed_response_data_rich',  10, 4);
remove_action('wp_head', 'wp_oembed_add_discovery_links');
remove_action('wp_head', 'wp_oembed_add_host_js');

5、替换 Wordpress jquery 源为 loli.net,加快网页打开速度:

add_action( 'init', 'jquery_register' );
function jquery_register() {
if ( !is_admin() ) {
wp_deregister_script( 'jquery' );
wp_register_script( 'jquery', ( 'https://cdnjs.loli.net/ajax/libs/jquery/1.12.4/jquery.min.js' ), false, null, true );
wp_enqueue_script( 'jquery' );
}
}

6、移除Really Simple Discovery

Really Simple Discovery在head区域,可以看到:

<link rel=”wlwmanifest” type=”application/wlwmanifest+xml” href=”http://example.com/wp-includes/wlwmanifest.xml”>

移除代码:

remove_action( 'wp_head', 'rsd_link' );

7、移除前后文、第一篇文章、主页meta信息

WordPress把前后文、第一篇文章和主页链接全放在meta中。对SEO的帮助并不大,反而让增多head头部信息。建议删除

移除代码:

remove_action( 'wp_head', 'index_rel_link' );//移除主页链接
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//删除上下篇文章链接

8、移除shortlink标签

在WordPress 3.0开始,即使你已经设定了永久链接,但是在文章页面标签内还是会出现一个shortlink标签,如果不想搜索引擎抓取 “/?p=” 的网址,那么head头部里短网址标签一并移除吧。

移除代码:

remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
remove_action( 'template_redirect','wp_shortlink_header',11,0);

9、移除feed

HTML中通过<link rel=”alternate” type=”application/rss+xml” title=”feed名” href=”http://xxx.com/feed/” />来指定博客feed。当网站发布新内容时,可以让浏览器发现并提醒已订阅用户。如果你不想添加feed,那就删除它。

移除代码:

remove_action( 'wp_head', 'feed_links', 2 );//文章和评论feed
remove_action( 'wp_head', 'feed_links_extra', 3 ); //分类等feed

10、禁用embeds功能并移除wp-embed.min.js文件

WordPress自动添加embeds功能和wp-embed.min.js文件,在head区域,可以看到:

<script type=”text/javascript” src=”http://wordpress.cc/wp-includes/js/wp-embed.min.js?ver=5.2.1″></script>

移除代码

function disable_embeds_init() {

/* @var WP $wp */
global $wp;

// Remove the embed query var.

$wp->public_query_vars = array_diff( $wp->public_query_vars, array(

’embed’,

) );

// Remove the REST API endpoint.

    remove_action( 'rest_api_init', 'wp_oembed_register_route' );

// Turn off

    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' );

}

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

/**
* Removes the 'wpembed' TinyMCE plugin.
*
* @since 1.0.0
*
* @param array $plugins List of TinyMCE plugins.
* @return array The modified list.
*/

function disable_embeds_tiny_mce_plugin( $plugins ) {
return array_diff( $plugins, array( 'wpembed' ) );

}

/**
* Remove all rewrite rules related to embeds.
*
* @since 1.2.0
*
* @param array $rules WordPress rewrite rules.
* @return array Rewrite rules without embeds rules.
*/

function disable_embeds_rewrites( $rules ) {

foreach ( $rules as $rule => $rewrite ) {
if ( false !== strpos( $rewrite, 'embed=true' ) ) {
unset( $rules[ $rule ] );

}

}

return $rules;

}

/**
* Remove embeds rewrite rules on plugin activation.
*
* @since 1.2.0
*/

function disable_embeds_remove_rewrite_rules() {
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
flush_rewrite_rules();

}

register_activation_hook( __FILE__, 'disable_embeds_remove_rewrite_rules' );

/**
* Flush rewrite rules on plugin deactivation.
*
* @since 1.2.0
*/

function disable_embeds_flush_rewrite_rules() {
remove_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );

11、移除WordPress头部加载DNS预获取(dns-prefetch)

在head我们可以看到:

<link rel=”dns-prefetch” href=”//s.w.org”>

移除代码:

function remove_dns_prefetch( $hints, $relation_type ) {

    if ( 'dns-prefetch' === $relation_type ) {
        return array_diff( wp_dependencies_unique_hosts(), $hints );
    }
        return $hints;
    }
add_filter( 'wp_resource_hints', 'remove_dns_prefetch', 10, 2 );

12、移除emoji表情script和style

在head可以看到:

{“baseUrl”:”https:\/\/s.w.org\/images\/core\/emoji\/2.3\/72×72\/”,”ext”:”.png”,”svgUrl”:”https:\/\/s.w.org\/images\/core\/emoji\/2.3\/svg\/”,”svgExt”:”.svg”,”source”:{“concatemoji”:”http:\/\/wordpress.cc\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.8″}};
!function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline=”top”,k.font=”600 32px Arial”,a){case”flag”:return k.fillText(f(55356,56826,55356,56819),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,56826,8203,55356,56819),0,0),c=j.toDataURL(),b===c&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447),0,0),c=j.toDataURL(),b!==c);case”emoji4″:return k.fillText(f(55358,56794,8205,9794,65039),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55358,56794,8203,9794,65039),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement(“script”);c.src=a,c.defer=c.type=”text/javascript”,b.getElementsByTagName(“head”)[0].appendChild(c)}var f,g,h,i,j=b.createElement(“canvas”),k=j.getContext&&j.getContext(“2d”);for(i=Array(“flag”,”emoji4″),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++)c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports[i[h]],”flag”!==i[h]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[i[h]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener(“DOMContentLoaded”,g,!1),a.addEventListener(“load”,g,!1)):(a.attachEvent(“onload”,g),b.attachEvent(“onreadystatechange”,function(){“complete”===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type=”text/css”>
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>

这样一大段emoji表情包含的代码,会在页面加载静态资源,建议禁用和移除JS文件。

禁用代码:

remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );

13、移除wp-json链接

在head我们可以看到

<link rel=”https://api.w.org/” href=”http://wordpress.cc/wp-json/”>

移除代码:

remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );

14、去掉各种无用的头部输出

add_filter( 'xmlrpc_enabled', '__return_false' ); //关闭 XML-RPC,提高安全性:
remove_action( 'wp_head', 'rsd_link' ) ; //关闭 RSD Links
remove_action('wp_head', 'wlwmanifest_link'); //关闭 wlwmanifest Link
remove_action('wp_head', 'rsd_link'); //关闭 RSD Link Tag:
//关闭 RSS:
function itsme_disable_feed() {
  wp_die( __( 'No feed available, please visit the <a href="'. esc_url( home_url( '/' ) ) .'">homepage</a>!' ) );
}
 
add_action('do_feed', 'itsme_disable_feed', 1);
add_action('do_feed_rdf', 'itsme_disable_feed', 1);
add_action('do_feed_rss', 'itsme_disable_feed', 1);
add_action('do_feed_rss2', 'itsme_disable_feed', 1);
add_action('do_feed_atom', 'itsme_disable_feed', 1);
add_action('do_feed_rss2_comments', 'itsme_disable_feed', 1);
add_action('do_feed_atom_comments', 'itsme_disable_feed', 1);
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );

//关闭 pingback,提升速度:
function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
      if ( 0 === strpos( $link, $home ) )
        unset($links[$l]);
    }
add_action( 'pre_ping', 'no_self_ping' );

//移除 API Links
add_action('after_setup_theme', function(){
    remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
});

//移除 dashicons
function wpdocs_dequeue_dashicon() {
    if (current_user_can( 'update_core' )) {
      return;
    }
    wp_deregister_style('dashicons');
}
add_action( 'wp_enqueue_scripts', 'wpdocs_dequeue_dashicon' );

//移除头部 link 的 api.w.org 连接
remove_action('template_redirect', 'rest_output_link_header', 11, 0);

//禁止非中文评论

function refused_spam_comments( $comment_data ) {  
    $pattern = '/[一-龥]/u';  
    if(!preg_match($pattern,$comment_data['comment_content'])) {  
        wp_die('评论必须含中文!');  
    }  
    return( $comment_data );  
}  
add_filter('preprocess_comment','refused_spam_comments');

15、移除 WordPress 5.9 内联样式

在升级到 WordPress5.9 后,在头部多出一大段内联样式,应该是为新增加的“网站编辑器”功能预设的样式,暂时用不到这个功能,先删除它。

仅移除 WordPress 5.9 新增加的内联样式,前台头部插入了 global-styles 内联样式,并向底部插入了很多的 svg 图像,对于我们来说这个些代码显得有些多余了,因此决定把这些去掉,将下面代码添加到当前主题函数模板 functions.php 最后:

add_action( 'wp_enqueue_scripts', 'remove_global_styles' );
function remove_global_styles(){
	wp_dequeue_style( 'global-styles' );
}

移除所有区块样式

function remove_wp_block_library_css(){
wp_dequeue_style( 'wp-block-library' );
wp_dequeue_style( 'wp-block-library-theme' );
wp_dequeue_style( 'wc-block-style' ); // 移除WOO插件区块样式
wp_dequeue_style( 'global-styles' ); // 移除 THEME.JSON
}
add_action( 'wp_enqueue_scripts', 'remove_wp_block_library_css', 100 );

二、后台相关

1、关闭 wordpress 后台主题插件更新提示

//关闭 wordpress 后台主题插件更新提示
add_filter('pre_site_transient_update_core', create_function('$a', "return null;")); // 关闭核心提示
add_filter('pre_site_transient_update_plugins', create_function('$a', "return null;")); // 关闭插件提示
add_filter('pre_site_transient_update_themes', create_function('$a', "return null;")); // 关闭主题提示
remove_action('admin_init', '_maybe_update_core'); // 禁止 WordPress 检查更新
remove_action('admin_init', '_maybe_update_plugins'); // 禁止 WordPress 更新插件
remove_action('admin_init', '_maybe_update_themes'); // 禁止 WordPress 更新主题

2、屏蔽无用的WordPress默认小工具

将代码加到主题 functions 模版中即可,之前已启用的默认小工具将失效。

//屏蔽无用的WordPress默认小工具
add_action('widgets_init', 'my_unregister_widgets');
function my_unregister_widgets() {
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Meta');
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Recent_Comments');
    unregister_widget('WP_Widget_Recent_Posts');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Search');
    unregister_widget('WP_Widget_Tag_Cloud');
    unregister_widget('WP_Widget_Text');
    unregister_widget('WP_Nav_Menu_Widget');
    unregister_widget('WP_Widget_Media_Image');
    unregister_widget('WP_Widget_Media_Gallery');
    unregister_widget('WP_Widget_Media_Video');
    unregister_widget('WP_Widget_Media_Audio');
}

后续慢慢补充更新........................

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值