去除wordpress头部不需要的元标签

Wordpress主题 2014年09月20日 ,

最近查看了不少的WordPress主题,发现两个问题,一部分主题head标签内的无用信息太多如图一;另一部分的主题为了防止wp_head输出的无用信息太多直接没有使用该函数(真是坑)如图二。http://furzoom.com/remove-WordPress-header/

head标签内的无用信息太多

图一 head标签内的无用信息太多

没有使用wp_head()函数

图二 没有使用wp_head()函数

头部信息处理

如果使用如图二中的处理方法,不会有任何多余的元标签添加进head标签内,但是有些需要在head标签内添加js的插件就不会正常工作了,因为它们依赖wp_head()函数进行。所以看到这样的主题就需要考虑其使用了。

如果如图一那样wordpress主题没有对head标签内的元素进行处理,不仅输出了不必要的标签,还可能因为输出wordpress的版本号让攻击者进行有针对性的攻击。

针对wordpress4.0版本有两种解决办法。

  • 1.使用remove_action()函数将相关输出移除。
  • 2.将wp-includes文件夹下的default-filters.php文件中相关add_action()函数注释掉。

使用remove_action()

将以下代码加入到当前主题的functions.php的文件中即可,可以根据需要自行删减。该修改仅对当前主题生效。

/**
 * @brief remove extra head meta for wordpress 4.0
 * @author http://furzoom.com/
 * @date 2014-09
 */
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
//remove_action( 'publish_future_post', 'check_and_publish_future_post', 10, 1 );
remove_action( 'wp_head', 'wp_generator' );
//remove_action( 'wp_footer', 'wp_print_footer_scripts' );
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 );
remove_action( 'wp_head', 'index_rel_link', 10, 0 );
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );

add_action('widgets_init', 'my_remove_recent_comments_style');
function my_remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style'));
}

remove_action()用于移除附属于指定动作hook的函数,函数原型为

remove_action( $tag, $function_to_add, $priority, $accepted_args );

注意:添加hook时的$function_to_remove 和$priority参数要能够相匹配。

如何知道增加时的$priority呢,参照第二种方式。

语句详解

各语句的含义如下:

  • 1.移除feed信息
    • HTML中通过
      	<link title="”枫竹梦”" href="”http://furzoom.com/feed/" rel="”alternate”" type="”application/rss+xml”" />

      来指定博客feed。可以被浏览器检测到,然后被读者订阅。

      remove_action( 'wp_head', 'feed_links', 2 );//文章和评论feed
      remove_action( 'wp_head', 'feed_links_extra', 3 );//分类等feed
  • 2.移除离线编辑器开放接口
    • remove_action( 'wp_head', 'rsd_link' );//广义接口
      remove_action( 'wp_head', 'wlwmanifest_link' );//针对微软Live Writer

      即使没有这些也可以使用离线编辑器进行编辑。

  • 3.移除前后文、第一篇文章、主页meta信息
    • 整体的SEO意义不大,针对百度没有意义。
      remove_action( ‘wp_head’, ‘index_rel_link’,10,0 );//主页meta信息
      remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );//前一篇文章链接 3.2以后版本移除
      remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );//后一篇文章链接 3.2以后版本移除
      remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );//相关文章链接
  • 4.移除wordpress版本信息
    • 强烈建议删除,可能被黑客利用
      remove_action( 'wp_head', 'wp_generator' );//wordpress版本信息
  • 5.移除短链接信息
    • remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 );//移除短链接信息

      如果当前页面定义了短连接,就在header中发送个短链接。如:

      	<link href="http://furzoom.com/?p=890" rel="shortlink" />
  • 6.移除定时发布确认
    • //remove_action( 'publish_future_post', 'check_and_publish_future_post', 10, 1 );//确认定时发布的post的状态正确

      建议保留,很多文章中都有说要移除它。

  • 7.移除footer的页脚脚本输出
    • //remove_action( 'wp_footer', 'wp_print_footer_scripts' );//移除footer中直接的脚本输出

      建议保留,还有很多插件是通过直接该hook输出的。建议保留,很多文章中都有说要移除它。

  • 8.移除头部的.recentcomments样式
    • 针对wordpress2.9以上版本移除head标签内的.recentcomments样式。
      //.recentcomments样式
      add_action('widgets_init', 'my_remove_recent_comments_style');
      function my_remove_recent_comments_style() {
          global $wp_widget_factory;
          remove_action('wp_head', array($wp_widget_factory->widgets['WP_Widget_Recent_Comments'], 'recent_comments_style'));
      }

修改default-filters.php文件

打开wp-includes文件夹下的default-filters.php文件,找到如下代码片断,根据上面提到的相应代码对如下进行更改,修改将对所有的主题生效,但是当wordpress升级时需要重新进行设置。

add_action( 'wp_head',             'wp_enqueue_scripts',              1     );
add_action( 'wp_head',             'feed_links',                      2     );
add_action( 'wp_head',             'feed_links_extra',                3     );
add_action( 'wp_head',             'rsd_link'                               );
add_action( 'wp_head',             'wlwmanifest_link'                       );
add_action( 'wp_head',             'adjacent_posts_rel_link_wp_head', 10, 0 );
add_action( 'wp_head',             'locale_stylesheet'                      );
add_action( 'publish_future_post', 'check_and_publish_future_post',   10, 1 );
add_action( 'wp_head',             'noindex',                          1    );
add_action( 'wp_head',             'wp_print_styles',                  8    );
add_action( 'wp_head',             'wp_print_head_scripts',            9    );
add_action( 'wp_head',             'wp_generator'                           );
add_action( 'wp_head',             'rel_canonical'                          );
add_action( 'wp_footer',           'wp_print_footer_scripts',         20    );
add_action( 'wp_head',             'wp_shortlink_wp_head',            10, 0 );
add_action( 'template_redirect',   'wp_shortlink_header',             11, 0 );
add_action( 'wp_print_footer_scripts', '_wp_footer_scripts'                 );
add_action( 'init',                'check_theme_switched',            99    );
add_action( 'after_switch_theme',  '_wp_sidebars_changed'                   );

使用remove_action()函数进行移除head信息的时候,优先级及函数参数数量与上面代码使用的优先级及函数参数数量相同。

以上就是两种移除head标签内不必要信息的方式。

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《去除wordpress头部不需要的元标签》
日志链接:http://furzoom.com/remove-wordpress-header/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部