Как правильно удалить версию WordPress

В этом мануале я покажу вам правильный способ удаления метатега generator, который WordPress вставляет в head часть HTML документа и в код фидов. Также тут я упомяну о других о других метатегах, которые по умолчанию вставляются в документ и которые возможно тоже нужно удалить.

Удаление версии WordPress полезно в целях безопасности, особенно, если вы пользуетесь старыми версиями движка. Потому что, хакеры могут воспользоваться этой информацией. Во многих старых версиях WP есть свои "дыры". Если вы используете последнюю версию WP, то вам пожалуй не нужно использовать этот мануал. Однако, к слову, я всегда удаляю версию WP на своих сайтах, несмотря ни на что.

"Как насчет плагина?" - спросите вы. Да, плагины которые удаляют версию WP существуют, однако это настолько простая задача, что плагин лучше не использовать.

Где отображается версия WordPress?

Откройте исходный код страницы (ctrl+u), нажмите ctrl+f (поиск) и впишите слово для поиска "generator". В <head> части документа вы должны увидеть строку:

<meta name="generator" content="WordPress x.x.x" />

где вместо х.х.х ваша версия WordPress. Например, 3.1.3

Заметка: если такой строки нет в вашем коде, то тема которую вы используете уже удаляет версию.

Удаление метатега generator

C версии 2.5, WordPress автоматически отображает версию движка в head части документа. Версия выводится там, где используется функция wp_head(). Эта функция вызывается прямо перед закрывающим тегом </head> и используется плагинами для подключения стилей и скриптов.

Я встречал в сети, где удалять версию рекомендуется через фильтр wp_head. Для этого нужно добавить такой код в functions.php вашей темы:

remove_action('wp_head', 'wp_generator');

Проблема такого удаления в том, что информация о версии удаляется только с веб-страниц сайта. Если мы посмотрим исходный код фида по ссылке http://ваш_сайт/feed мы увидим там похожий метатаег:

<generator>http://wordpress.org/?v=3.3.1</generator>

Чтобы полностью удалить версию WP с веб-страницы и со страниц фидов, добавьте следующий код в файл темы functions.php:

// Полностью убираем версию WordPress
add_filter('the_generator', '__return_empty_string');

Заметка: также не забудьте удалить файл readme.html в корневом каталоге WordPress. Этот сайт легко можно открыть в браузере и в самом его начале указывается версия движка.

 Удаление версий в ссылках стилей и скриптов

Кроме того, что WordPress добавляет метаттег generator, он также добавляет версию в конец ссылки на добавляемый css стиль или js скрипт, с том случае если версия скрипта или стиля не указана. В этом примере в конце можно увидеть версию WP.

<link rel='stylesheet' id='dashicons-css'  href='http://www.wp-info.ru/core/wp-includes/css/dashicons.min.css?ver=3.9.1' type='text/css' media='all' />

Чтобы удалить версию из всех ссылок, на стили и скрипты, добавьте такой код в файл functions.php:

// Удаление параметра ver из добавляемых скриптов и стилей
function rem_wp_ver_css_js( $src ) {
    if ( strpos( $src, 'ver=' ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'rem_wp_ver_css_js', 9999 );
add_filter( 'script_loader_src', 'rem_wp_ver_css_js', 9999 );

Однако этот вариант удалить все параметры ver без разбора, версия WP это или версия плагина.

Чтобы удалить только версию WP, используем такой скрипт:

add_filter( 'script_loader_src', 'remove_wp_version_strings' );
add_filter( 'style_loader_src', 'remove_wp_version_strings' );
function remove_wp_version_strings( $src ) {
	 parse_str( parse_url($src, PHP_URL_QUERY), $query );

	 if ( !empty($query['ver']) && $query['ver'] === $GLOBALS['wp_version'] ) {
		  $src = remove_query_arg( 'ver', $src );
	 }

	 return $src;
}

Что можно удалить еще с wp_head

Хук-событие wp_head срабатывает внутри HTML блока <head></head>. Сюда кроме метатега "generator" WordPress по умолчанию добавляем еще много чего. Чтобы узнать какая функцию отвечает за какую строку, вам нужно открыть файл wp-includes/default-filters.php и посмотреть все функции прикрепленные к событию wp_head.

В этом примере я в комментариях объясню какая функция за что отвечает:

// События
// Позволяет плагинам добавлять скрипты во фронт-энд
add_action( 'wp_head',             'wp_enqueue_scripts',              1     );
// Выводит ссылка на основные фиды
add_action( 'wp_head',             'feed_links',                      2     );
// Выводит ссылки на дополнительные фиды (фид категоирй)
add_action( 'wp_head',             'feed_links_extra',                3     );
// Выводит ссылку на сервис RSD (Really Simple Discovery)
add_action( 'wp_head',             'rsd_link'                               );
// Выводит ссылку на файл манифест программы Windows Live Writer
add_action( 'wp_head',             'wlwmanifest_link'                       );
// Ссылки на соседние статьи (<link rel='next'... <link rel='prev'...)
add_action( 'wp_head',             'adjacent_posts_rel_link_wp_head', 10, 0 );
// Выводит ссылку на файл стилей (готовый метатег link)
add_action( 'wp_head',             'locale_stylesheet'                      );
// Выводит noindx метатег, основываясь на настройках блога.
// Если с настройках чтения установлена галочка "попросить поисковые системы не индексировать сайт", то будет выведет метатег noindex 
add_action( 'wp_head',             'noindex',                          1    );
// Позволяет плагинам подключать css стили
add_action( 'wp_head',             'wp_print_styles',                  8    );
// Скрипты которые нужно выводить в html head части во фрон-энде
add_action( 'wp_head',             'wp_print_head_scripts',            9    );
// Выводит версию движка
add_action( 'wp_head',             'wp_generator'                           );
// Метатег rel=canonical для страниц записей
add_action( 'wp_head',             'rel_canonical'                          );
// Выводит короткую ссылку на запись
add_action( 'wp_head',             'wp_shortlink_wp_head',            10, 0 );

Чтобы удалить функцию вам нужно использовать функцию remove_filter() в которой указать фильтр и название функции которую нужно удалить. Например, удалить функцию feed_links:

remove_filter('wp_head', 'feed_links');

Если вы знаете что-то еще об удалении версии, не молчите, поделитесь в комментариях и я дополню статью.

Рубрика: Настройка WordPress | 28 мая 2014

Предыдущие записи из рубрики `Настройка WordPress`

4 комментария

samsim, 06.06.2014 в 02:23

Этот метод более гуманный по отношению к коддингу.

ОтветитьОтветить
Никита, 29.07.2014 в 18:03

спасибо что на земле есть люди с адекватным кодом и комментариями

ОтветитьОтветить
serb000, 02.12.2014 в 18:20

Красавчик СПАСИБО

ОтветитьОтветить
fun32, 20.02.2017 в 16:14

полезная статья. наконец то разобрался с этой версией)

ОтветитьОтветить

Комментировать

Новые комментарии