Предпочитаю отключать функции WordPress, которые не использую в проектах. Сверх прибавки к скорости сайта или супер SEO это не даст, но сердце перфекциониста точно порадует. Возможно, кто-то поспорит о целесообразности отключения некоторых фич, но я ратую за то, чтобы процессы были контролируемыми, а не навязаны в качестве избыточного функционала.
В этой заметке я собрал куски кода, отключающие те или иные функции WordPress. Для использования, поместите нужные в functions.php вашей темы. Но прошу, не надо копипастить всё подряд, используйте осознано и только то, что вам действительно нужно.
Как убрать лишние теги из head
Для начала немного приберемся в head.
/* -------------------------------------------------------------------------- * Убираем мусор из head * -------------------------------------------------------------------------- */ // Удаляем код meta name="generator" remove_action( 'wp_head', 'wp_generator' ); //убираем в мета rel=dns-prefetch href=//s.w.org remove_action( 'wp_head', 'wp_resource_hints', 2 ); // Удаляем link rel="canonical" remove_action( 'wp_head', 'rel_canonical' ); // Удаляем link rel="shortlink" remove_action( 'wp_head', 'wp_shortlink_wp_head' ); // Удаляем link rel="wlwmanifest" remove_action( 'wp_head', 'wlwmanifest_link' ); // Удаляем различные ссылки link rel remove_action( 'wp_head', 'index_rel_link' ); remove_action( 'wp_head', 'start_post_rel_link', 10 ); remove_action( 'wp_head', 'parent_post_rel_link', 10 ); remove_action( 'wp_head', 'adjacent_posts_rel_link', 10 ); remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
Как убрать Emoji из WordPress
Смайлики Emoji в WordPress подключаются как костыль – скриптом на несколько строк кода в head, и если Emoji не используются на сайте, то лучше их убрать.
/* -------------------------------------------------------------------------- * Убираем эмоджи - продолжаем избавляться от мусора в head * -------------------------------------------------------------------------- */ remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts', 'print_emoji_detection_script' ); remove_action( 'wp_print_styles', 'print_emoji_styles' ); remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_filter( 'the_content_feed', 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss', 'wp_staticize_emoji' ); remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
Как избавиться от wp-json
С обновлением WordPress до версии 4.4 подъехал и REST API. Все бы ничего, но интерфейс для взаимодействия с ним доступен по ссылке http://yousite/wp-json/ и индексируется поисковыми системами, что не хорошо. Поэтому этот полезный, но пока еще сырой и не всегда и не всем нужный функционал можно отключить.
/* -------------------------------------------------------------------------- * Отключаем wp-json * -------------------------------------------------------------------------- */ // Отключаем сам REST API add_filter('rest_enabled', '__return_false'); // Отключаем фильтры REST API remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' ); remove_action( 'wp_head', 'rest_output_link_wp_head', 10, 0 ); remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 ); remove_action( 'auth_cookie_malformed', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_expired', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_bad_username', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_bad_hash', 'rest_cookie_collect_status' ); remove_action( 'auth_cookie_valid', 'rest_cookie_collect_status' ); remove_filter( 'rest_authentication_errors', 'rest_cookie_check_errors', 100 ); // Отключаем события REST API remove_action( 'init', 'rest_api_init' ); remove_action( 'rest_api_init', 'rest_api_default_filters', 10, 1 ); remove_action( 'parse_request', 'rest_api_loaded' ); // Отключаем Embeds связанные с REST API remove_action( 'rest_api_init', 'wp_oembed_register_route'); remove_filter( 'rest_pre_serve_request', '_oembed_rest_pre_serve_request', 10, 4 ); remove_action( 'wp_head', 'wp_oembed_add_discovery_links' ); // Редирект с wp-json на главную add_action( 'template_redirect', function() { if ( preg_match( '#^/wp-json/(.*)#', $_SERVER['REQUEST_URI'] ) ) { wp_redirect( get_option( 'siteurl' ), 301 ); die(); } } );
Отключение фидов и rss
Технология RSS позволяет пользователям подписаться на новости вашего сайта. По умолчанию RSS-канал доступен по ссылке http://yousite/feed/. Штука относительно популярная, но если у вас сайт-визитка, небольшой блог или корпоративный сайт, то полезность её сомнительна. Отключать или нет — решать вам.
function td_disable_feed() { wp_redirect(get_option('siteurl')); // Редирект на главную страницу сайта } add_action('do_feed', 'td_disable_feed', 1); add_action('do_feed_rdf', 'td_disable_feed', 1); add_action('do_feed_rss', 'td_disable_feed', 1); add_action('do_feed_rss2', 'td_disable_feed', 1); add_action('do_feed_atom', 'td_disable_feed', 1); add_action('do_feed_rss2_comments', 'td_disable_feed', 1); add_action('do_feed_atom_comments', 'td_disable_feed', 1); remove_action( 'wp_head', 'feed_links_extra', 3 ); remove_action( 'wp_head', 'feed_links', 2 ); remove_action( 'wp_head', 'rsd_link' );
Еще немного порядка
Удалим type=»text/javascript» в тегах <script> и type=”text/css” в тегах <style>, чтобы код верстки соответствовал современному стандарту и валидаторы на него не ругались.
/* -------------------------------------------------------------------------- * удаляем type="text/javascript" в тегах <script> и * type=”text/css” в тегах <style>, для соответствия стандарту * -------------------------------------------------------------------------- */ add_filter('style_loader_tag', 'td_remove_type_attr'); add_filter('script_loader_tag', 'td_remove_type_attr'); function td_remove_type_attr($src) { return preg_replace( "/type=['\"]text\/(javascript|css)['\"]/", '', $src ); }
Чистим заголовки ответа сервера
Безопасность это не повысит, как обещают некоторые, тем не менее нет смысла в ответе сервера размещать лишнюю информацию.
/* -------------------------------------------------------------------------- * Чистим заголовки ответа сервера * -------------------------------------------------------------------------- */ // Удаляем link rel=shortlink remove_action( 'template_redirect', 'wp_shortlink_header', 11 ); // Удаляем X-Powered-By header_remove( 'x-powered-by' );
На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.
Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.