WordPress - Как удалить метагенераторы?

У меня есть эти теги:

<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 тем?

Ответ 1

Если вы пытаетесь удалить только meta="generator" добавьте эту строку в файл functions.php.

remove_action( 'wp_head', 'wp_generator' );

Ответ 2

Я искал решение для удаления мета-генератора Layer Slider, не нашел большой помощи ни на одном из немногих сайтов, на которые я смотрел, все они делятся одной и той же информацией, которая относится только к генератору WordPress или популярным плагинам, таким как WooCommerce.

Проблема в том, что каждый плагин будет иметь свои собственные имена хуков и соглашения об именах, поэтому узнать или узнать их все будет практически невозможно. Я думаю, что самый простой способ - это простой PHP с preg_replace.

Рабочий код, протестированный в WordPress 4.7.2. Внутри functions.php вашей темы вставьте этот код, и он должен работать.

//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 начиная с верхнего колонтитула до preg_replace колонтитула. Посмотрите, как ob_start работает в руководстве по PHP, также иногда кодекс WordPress заявляет, что он должен использовать ob_start.

Если вы найдете это полезным, пожалуйста, добавьте большие пальцы, чтобы следующий ищущий мог найти рабочее решение, охватывающее все метагенераторы. Я считаю плохой безопасностью для разработчиков плагинов и платформ вставлять номера версий метагенераторов в код. Особенно с постоянно возникающими уязвимостями.

Я также добавил плагин, который делает именно это в репозитории WordPress.

Удалить метагенераторы

Ответ 3

Я нашел этот исходный код плагина, в котором говорится, что он удаляет автоматически сгенерированные метатеги WP. Вы можете попробовать это.

  • Имя плагина: Удалить WP Meta​​li >
  • URI плагина: http://leekelleher.com/
  • Описание: Этот плагин удаляет автоматически сгенерированные метатеги WP с каждой веб-страницы.
  • Автор: Ли Келлехер

Ответ 4

В нижней части файла 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');

Ответ 5

Недавно я столкнулся с этой проблемой и мне пришлось удалить метатеги для обеспечения безопасности и спама для клиента. Мне удалось удалить метагенератор Wordpress, но тема использует woo framework, поэтому

remove_action('wp_head', 'wp_generator');

Недостаточно. Чтобы удалить

<meta name="generator" content="Woo Framework Version x.x.x" />

и любые теги метагенераторов, которые генерирует ваша тема, просто добавьте эту строку в конец вашего шаблона functions.php

// remove the unwanted <meta> links
remove_action('wp_head', 'wp_generator');
remove_action('wp_head', 'woo_version'); 

Это работало для меня на Woo Framework 5.5.5. Чтобы определить место, где инициализируется метатег генератора, найдите файл admin-init.php для вашего шаблона, а функция woo_version() и функция woo_version_init() должны быть там. Обычно он находится под папкой include в вашем источнике темы.

Ответ 6

НЕТ!

В случае, если он жестко закодирован в шаблон темы (т.е. в header.php), вы должны вручную удалить это!

В противном случае используйте это полное решение, чтобы удалить все теги версии:

// ============ removing inbuilt WP version meta-tags ===========  http://stackoverflow.com/q/16335347/2377343  ========== //
  //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');   //remove inbuilt version
        remove_action('wp_head', 'woo_version');    //remove Woo-version (in case someone uses that)
    }
  //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 '';}
  // Hide "?vers=XXXXX" strings from scripts and styles  ( https://premium.wpmudev.org/blog/how-to-hide-your-wordpress-version-number/ )
    add_filter( 'script_loader_src', 'fjarrett_remove_wp_version_strings' );
    add_filter( 'style_loader_src', 'fjarrett_remove_wp_version_strings' );
    function fjarrett_remove_wp_version_strings( $src ) {   global $wp_version;
        parse_str(parse_url($src, PHP_URL_QUERY), $query);
        if ( !empty($query['ver']) && ($query['ver'] === $wp_version || $query['ver'] == $wp_version) ) { $src = remove_query_arg('ver', $src); }   return $src;
    }
// ========================================================== //

Ответ 7

Следующий код избавляет от всех тегов генератора в 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');

Ответ 8

Если вы создали свою собственную тему WordPress, у вас не будет проблем с генератором в мета-коде, делайте так, как я делал в образце samll. Там не будет генератора, если вы не будете объявлять его как некоторые из ваших пользовательских функций. Я пытаюсь контролировать все JS-скрипты и стили моей темы, как здесь. Если у меня есть стиль из плагинов, там нужно еще немного работы.

но если вы используете бесплатную тему, да в 100% будет генератор. Поэтому добавьте в файл Function.php 1: http://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');