WordPress - 如何移除元数据生成器标签?

21

我有这些标签:

<meta name="generator" content="Woo Framework Version 3.1.1" />
<meta name="generator" content="WordPress 3.5" />
<meta name="generator" content="Canvas 3.0" />

我知道要删除 WordPress 版本标签,需要添加:

remove_action( 'wp_head', 'wp_generator' ); // goes into functions.php

但是我应该如何删除主题中的meta标签?

10个回答

31

如果你只想去掉 meta="generator",请将以下代码添加到你的 functions.php 文件中。

remove_action( 'wp_head', 'wp_generator' );

2
这只会删除带有WordPress版本的那一行。 - Helge Klein

20

我在寻找解决方案,以删除Layer Slider的meta generator。在我查看的少数几个网站中,并没有找到太多帮助,它们都分享相同的信息,只涉及WordPress生成器或像WooCommerce这样的流行插件。

这里的问题是每个插件都会有自己的钩子名称和命名约定,因此学习或知道它们几乎是不可能的。我认为最简单的方法是使用纯PHP和preg_replace。

在您的主题的functions.php中放入下面的代码,经过测试,已在WordPress 4.7.2中起作用。

//Remove All Meta Generators
ini_set('output_buffering', 'on'); // turns on output_buffering
function remove_meta_generators($html) {
    $pattern = '/<meta name(.*)=(.*)"generator"(.*)>/i';
    $html = preg_replace($pattern, '', $html);
    return $html;
}
function clean_meta_generators($html) {
    ob_start('remove_meta_generators');
}
add_action('get_header', 'clean_meta_generators', 100);
add_action('wp_footer', function(){ ob_end_flush(); }, 100);

我正在使用正则表达式来捕获 meta 标签。它涵盖了他们是否在等号之间添加空格的情况。使用 ob_start 来覆盖整个文档。所以我们从头到尾添加 preg_replace。在PHP手册中了解如何使用ob_start,也有时WordPress编码手册会明确指出应该使用ob_start

如果您发现这对您有用,请点赞,以便下一个寻找的人可以找到覆盖所有元生成器的工作解决方案。我认为这些插件和平台开发者将元生成器版本号放入代码中是不好的安全性做法。特别是随着漏洞不断被发现。

我还在WordPress存储库上添加了一个执行此操作的插件。

删除Meta Generators


这不一定适用于所有主题。我发现 kjy112 在下面的回答更有可能是正确的答案。(我在 WP 4.9.6 上使用了各种主题进行了测试,但没有使用 WooCommerce。) - Rick Hellewell
这应该适用于所有主题。所有主题都有页眉和页脚,提供的代码只使用普通的PHP正则表达式来剥离元生成器标签。如果您在使用代码时遇到问题,可能是由于ob_start配置的服务器问题。当您说“不一定适用于所有主题”时,您遇到了什么错误? - webbernaut
没有错误,只是在我的几个测试站点上无法正常工作。我发现@kjy112的答案在我所有的测试站点上都有效。 - Rick Hellewell
你启用了调试吗?有时会出现错误消息但被抑制了。另外,我想知道这些是自定义主题还是可以发送其中一个的链接。此代码仅使用纯PHP来剥离元生成器标记,它应该适用于几乎所有主题,除非存在服务器问题。 - webbernaut
输出缓冲是您的问题。如果您添加此行代码,应该可以解决问题。ini_set('output_buffering', 'on'); // 打开输出缓冲 - webbernaut

5

最近我遇到了这个问题,因为安全和防垃圾邮件的原因需要为客户删除meta标签。 我成功地移除了Wordpress的meta generator,但是主题使用了woo框架,因此需要使用

remove_action('wp_head', 'wp_generator');

不够。为了删除,请执行以下步骤。
<meta name="generator" content="Woo Framework Version x.x.x" />

将以下代码添加到模板的functions.php文件末尾即可删除任何由主题生成的meta generator标签:
```php remove_action('wp_head', 'wp_generator'); ```
// remove the unwanted <meta> links
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'woo_version'); 

这对我在Woo Framework 5.5.5上起了作用。要定位生成器meta标签初始化的位置,请查找模板中的admin-init.php文件,其中应有woo_version()函数和woo_version_init()函数。通常位于主题源代码的includes文件夹下。


5
functions.php文件的底部添加以下PHP片段:
// hide the meta tag generator from head and rss
function disable_version() {
   return '';
}
add_filter('the_generator','disable_version');
remove_action('wp_head', 'wp_generator');

3

不要!

如果版本号是硬编码到您的主题模板中的(例如在header.php文件中),那么您需要手动删除它!

否则,使用以下完整解决方案来删除所有版本标记:

// ============ removing inbuilt WP meta-tag ===========  https://dev59.com/q2Qo5IYBdhLWcg3wE8C2  ========== //
  //if included in wp_head
    add_action( 'after_setup_theme', 'my_wp_version_remover' ); function my_wp_version_remover(){
        remove_action('wp_head', 'wp_generator'); 
    }
  //clean all responses from VERSION GENERATOR
    add_filter('the_generator',             'rm_generator_filter'); 
    add_filter('get_the_generator_html',    'rm_generator_filter');
    add_filter('get_the_generator_xhtml',   'rm_generator_filter');
    add_filter('get_the_generator_atom',    'rm_generator_filter');
    add_filter('get_the_generator_rss2',    'rm_generator_filter');
    add_filter('get_the_generator_comment', 'rm_generator_filter');
    add_filter('get_the_generator_export',  'rm_generator_filter');
    add_filter('wf_disable_generator_tags', 'rm_generator_filter');
                                    function rm_generator_filter() {return '';}
// ========================================================== //

2
这是一个大杀器。它包括一些用于删除版本参数的内容,与问题无关。 - random_user_name

3

我找到了一个插件的源代码,它声称可以删除自动生成的WP元标记。你可以试试这个插件。

  • 插件名称:Remove WP Meta
  • 插件URI:http://leekelleher.com/
  • 描述:该插件从每个网页中删除自动生成的WP元标记。
  • 作者:Lee Kelleher

谢谢!我已经在WP 4.0上尝试过了,它完美地运行。 - Alexander Abakumov
仅提供链接的解决方案不可取。如果链接失效,这是无用的。在此提供插件的名称和/或相关代码。 - random_user_name
你说得对。我刚刚添加了更多信息,这些信息来自插件评论部分。幸运的是链接仍然有效,否则我就不会知道我建议的是哪个插件 :) - user850010
请注意,该方法不会从例如 RSS 订阅中删除版本号,因此禁用整个功能被认为是更好的做法。 - Jesse Nickles

1
这个可以找到Google的Sitekit,但可以根据需要进行修改。感谢这篇文章和他的插件
add_action('get_header',function (){
    ob_start(function ($o) {
        return preg_replace('/\n?<.*?content="Site Kit by Google.*?>/mi','',$o);
    });
});
add_action('wp_head',function (){
    ob_end_flush();
   }, 992);

1
以下代码可以删除 Woo Framework 中的所有生成器标签。我已经在 Woo Framework 6.0.4 和主题 Canvas 5.8.3 上测试过了:
// Remove the WooThemes version from the html headers
function no_woo_version ()
{
   return true;
}
add_filter ('wf_disable_generator_tags', 'no_woo_version');

1

0
如果您制作了自己的定制WordPress主题,那么在meta中就不会有生成器的问题,像我在小样本中所做的那样。如果您不像某些自定义函数那样声明它,就不会有生成器。我试图控制我的主题(例如此处)的所有JS脚本和样式。如果我有来自插件的样式,还需要进行更多的工作。

但是如果您使用免费主题,那么100%会有生成器。 因此,请在文件Function.php中添加1http://sierra-group.in.ua/start-legkogo-rezhima-preprocesornoj-sborki-vashih-fajlov-stilej-i-skriptov.html/#custom-register-styles-sctiprs

function disable_version() { return '';}
add_filter('the_generator','disable_version');
remove_action( 'wp_head', 'wp_generator');
remove_action('wp_head', 'woo_version'); 
function no_woo_version (){   return true;}
add_filter ('wf_disable_generator_tags', 'no_woo_version');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接