Оптимизируем WordPress header и удаляем лишний код

Если вы интересовались вопросом оптимизации wordpress кода, то наверняка сталкивались с разными советами по редактированию файла header.php. В нем генерируются значения блока HEAD для веб-страниц сайта. Самые простые рекомендации заключались в замене вызова стандартных функций, например, bloginfo(‘charset’) на конкретные значения charset=UTF-8. Однако позже оказалось, что выигрыш производительности в ходе данных действий по сравнению с тем же Lazy Load плагинами не так уж велик. Дело в том, что все основные значения в HEAD WordPress считывает из базы всего за одно обращение к ней. Сегодняшние подсказки по улучшению вордпресс header будут куда более полезными и эффективными.
Давайте внимательно посмотрим на исходный код в HEAD обычной страницы/поста. И параллельно сравним его с файлом header.php в WordPress шаблоне. Очевидно, что кроме парочки параметров, вызова Javascript скриптов и CSS результирующий HTML содержит много других дополнительных строк. Они автоматически генерируются в процессе использования разных плагинов на вашем сайте. Иногда финальный код получается ну очень большим.

Безусловно, многие из этих функций жизненно необходимы для корректной работы модулей, однако есть и такие, от которых можно избавиться. Самый простой пример — использование библиотеки jQuery. Некоторые плагины, как и сама система, вставляют код ее вызова в wordpress header. Как следствие, у вас может подгрузиться несколько дублирующих скриптов, еще и не с самой актуальной версией.
Второй пример хорошо просматривается для плагина WP-PageNavi (разбиение блога на страницы). В ходе работы модуль размещает свой CSS в шапку сайта, хотя более эффективно будет перенести все стили в базовый style.css. Причем избавиться от кода модуля так просто не получится, поможет лишь его деактивация (что разумеется, не вариант). Возможно, после версии 2.5.0 создатели внесли некоторые изменения в код, но раньше все работало именно так.
Базовая оптимизация wordpress header
Большинство «дополнительных вставок» блока HEAD реализуется системой с помощью хуков для wp_head. Если посмотрите код файла header.php в wordpress шаблоне, то наверняка найдете ее там. Просто убрать вызов функции не получится, так как в результате удалятся не только «ненужные вставки», но и важный код, без которого сайт работать не будет.
К счастью, вы можете безболезненно деактивировать некоторые последствия вызова wp_head. Избавиться от лишних элементов, которые не планируете использовать, и провести оптимизацию wordpress кода можно с помощью хаков для functions.php. Открываете файл функций и пишите туда следующий код:
remove_action('wp_head','feed_links_extra', 3); // убирает ссылки на rss категорий remove_action('wp_head','feed_links', 2); // минус ссылки на основной rss и комментарии remove_action('wp_head','rsd_link'); // сервис Really Simple Discovery remove_action('wp_head','wlwmanifest_link'); // Windows Live Writer remove_action('wp_head','wp_generator'); // скрыть версию wordpress
remove_action(‘wp_head’,’feed_links_extra’, 3); // убирает ссылки на rss категорий remove_action(‘wp_head’,’feed_links’, 2); // минус ссылки на основной rss и комментарии remove_action(‘wp_head’,’rsd_link’); // сервис Really Simple Discovery remove_action(‘wp_head’,’wlwmanifest_link’); // Windows Live Writer remove_action(‘wp_head’,’wp_generator’); // скрыть версию wordpress
Также можно скрыть разные линки при отображении постов блога (следующий, предыдущий, короткий url).
remove_action('wp_head','start_post_rel_link',10,0); remove_action('wp_head','index_rel_link'); remove_action('wp_head','adjacent_posts_rel_link_wp_head', 10, 0 ); remove_action('wp_head','wp_shortlink_wp_head', 10, 0 );
remove_action(‘wp_head’,’start_post_rel_link’,10,0); remove_action(‘wp_head’,’index_rel_link’); remove_action(‘wp_head’,’adjacent_posts_rel_link_wp_head’, 10, 0 ); remove_action(‘wp_head’,’wp_shortlink_wp_head’, 10, 0 );
Удаление JSON API ссылок:
remove_action( 'wp_head', 'rest_output_link_wp_head'); remove_action( 'wp_head', 'wp_oembed_add_discovery_links'); remove_action( 'template_redirect', 'rest_output_link_header', 11, 0 );
remove_action( ‘wp_head’, ‘rest_output_link_wp_head’); remove_action( ‘wp_head’, ‘wp_oembed_add_discovery_links’); remove_action( ‘template_redirect’, ‘rest_output_link_header’, 11, 0 );
Как я уже говорил выше про jQuery, в коде страницы библиотека может вызываться несколько раз (совместно с другими модулями) + версия используется не самая актуальная. Убрать скрипт из вордпресс header через remove_action не получится, но есть другой метод. В блоге найдете подробную статью про обновление и подключение jQuery в WordPress, а если говорить вкратце, то чтобы убрать вызов скрипта нужен такой код:
if ( !is_admin() ) { wp_deregister_script('jquery'); }
В данном случае хак срабатывает только для самого сайта (фронтэнда), не влияя на админку. Если вызывать функцию wp_deregister_script без условия IF, то в панели управления WP перестанут работать разные выпадающие меню и некоторые другие опции. Теоретически, можно было бы поместить код wp_deregister_script в header.php вместо functions.php, и тогда он «не заденет» бэкэнд. Но лучше использовать вараинт, указанный выше.
Напоследок еще 2 фишки. Недавно я публиковал статью про выключение Emoji. Короткую версию кода найдете ниже, хотя лично у меня сработала только расширенная, описанная в посте.
remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('wp_print_styles', 'print_emoji_styles');
remove_action(‘wp_head’, ‘print_emoji_detection_script’, 7); remove_action(‘wp_print_styles’, ‘print_emoji_styles’);
Также в блоге публиковал обзор модуля Disable позволяющего убрать Self Pingback и некоторые другие данные из в wp head в wordpress. Можно совмещать его с хаками через functions.php — так надежнее, плагин отключает не все.
Убираем лишний код плагинов и темы
Кроме самой системы код в блок HEAD добавляют разные модули. Иногда отключение данной фишки находится в настройках плагинов, но к сожалению, чаще всего разработчики не предусматривают подобную гибкость для своих решений. Поэтому дабы изменить wordpress header можно попробовать некий алгоритм.
Во-первых, вы должны внимательно посмотреть основной php файл того плагина, хуки которого собираетесь деактивировать. Там должна встречаться конструкция по типу:
add_action('wp_head', 'plugin_function_here');
Нашли? — хорошо. Теперь дабы избавиться от вызова функции добавляем в файл functions.php следующую строку:
remove_action('wp_head', 'plugin_function_here');
Сохраняете и смотрите что получилось. Ниже собрал несколько примеров хаков для разных модулей. Возможно, кое-что пригодится.
WP-Syntax
Фукция ниже позволяет убрать подключение стилей для подсветки синтаксиса программного кода в тексте. Само содержимое файла wp-syntax.css небольшое, поэтому можно просто добавить в стандартный style.css.
remove_action( 'wp_head','wp_syntax_head');
qTranslate-X
Модуль добавляет в wordpress header информацию о версии, которую можно скрыть.
remove_action('wp_head','qtranxf_wp_head_meta_generator');
Contact Form 7
Для Contact Form 7 решение чуть более сложное. Логично, что вызов плагина не нужен на страницах, где этой самой формы нет. Он лишь создает дополнительную нагрузку. Исправляем ситуацию и проведем оптимизацию wordpress кода с помощью следующих строк:
// Deregister Contact Form 7 styles add_action( 'wp_print_styles', 'aa_deregister_styles', 100 ); function aa_deregister_styles() { if ( ! is_page( get_theme_mod( "header_contacts") ) ) { wp_deregister_style( 'contact-form-7' ); } } // Deregister Contact Form 7 JavaScript files on all pages without a form add_action( 'wp_print_scripts', 'aa_deregister_javascript', 100 ); function aa_deregister_javascript() { if ( ! is_page( get_theme_mod( "header_contacts") ) ) { wp_deregister_script( 'contact-form-7' ); } }
// Deregister Contact Form 7 styles add_action( ‘wp_print_styles’, ‘aa_deregister_styles’, 100 ); function aa_deregister_styles() < if ( ! is_page( get_theme_mod( "header_contacts") ) ) < wp_deregister_style( 'contact-form-7' ); >> // Deregister Contact Form 7 JavaScript files on all pages without a form add_action( ‘wp_print_scripts’, ‘aa_deregister_javascript’, 100 ); function aa_deregister_javascript() < if ( ! is_page( get_theme_mod( "header_contacts") ) ) < wp_deregister_script( 'contact-form-7' ); >>
WP-PageNavi
Бывают уникальные случаи, когда использование remove_action для wp_head не срабатывает. Так, например, с тем же WP-PageNavi (версии 2.5.0), где нет явного вызова функций в wp_head, но плагин все равно грузит свой файл стилей. Если внимательно рассмотреть исходный код wp-pagenavi.php, то найдете там некую функцию «Enqueue PageNavi Stylesheets», которая добавляет стили через add_action. Соответственно чтобы прекратить этот вызов размещаем в файле функций fuctions.php строку:
remove_action('wp_print_styles', 'pagenavi_stylesheets');
Yet Another Related Posts Plugin
Стили плагина похожих постов YARPP можно включить в style.css, убрав загрузку нескольких лишних файлов. Хак избавляется от кода модуля в header и footer: ликвидируются файлы стилей widget.css, related.css и yarpp-thumbnails-yarpp-thumbnail.
add_action( 'wp_print_styles', 'tj_deregister_yarpp_header_styles' ); function tj_deregister_yarpp_header_styles() { wp_dequeue_style('yarppWidgetCss'); // Следующая строка нужна, если related.css грузится в header, а в футере отключен wp_deregister_style('yarppRelatedCss'); } add_action( 'wp_footer', 'tj_deregister_yarpp_footer_styles' ); function tj_deregister_yarpp_footer_styles() { wp_dequeue_style('yarppRelatedCss'); wp_dequeue_style('yarpp-thumbnails-yarpp-thumbnail'); }
add_action( ‘wp_print_styles’, ‘tj_deregister_yarpp_header_styles’ ); function tj_deregister_yarpp_header_styles() < wp_dequeue_style('yarppWidgetCss'); // Следующая строка нужна, если related.css грузится в header, а в футере отключен wp_deregister_style('yarppRelatedCss'); >add_action( ‘wp_footer’, ‘tj_deregister_yarpp_footer_styles’ ); function tj_deregister_yarpp_footer_styles()
Для шаблонов/тем
Если вам нужно убрать лишние стили или скрипты из темы, то можете воспользоваться функциями wp_dequeue_style и wp_deregister_script. Ниже привожу пример кода, который мне помог решить соответствующую задачу. Названия скриптов нашел в итоговом HTML и разных файлах шаблона.
add_action( 'wp_enqueue_scripts', 'remove_some_stylesheet', 20 ); function remove_some_stylesheet() { wp_dequeue_style('flexslider'); wp_dequeue_style('owl-carousel'); wp_dequeue_style('owl-theme'); wp_dequeue_style('font-awesome'); wp_dequeue_style('wp-pagenavi'); wp_deregister_script('flexslider'); wp_deregister_script('googlemapapis'); wp_deregister_script('easing'); wp_deregister_script('jflickrfeed'); wp_deregister_script('playlist'); wp_deregister_script('jplayer'); }
add_action( ‘wp_enqueue_scripts’, ‘remove_some_stylesheet’, 20 ); function remove_some_stylesheet()
В общем, вы должны были заметить некий глобальный принцип работы с «ненужными вызовами» для wp_head — находите соответствующую функцию плагина/темы, а затем ее отключаете. С помощью разных хаков в fuctions.php сможете изменить вордпресс header дабы: 1) избавиться от лишней функциональности; 2) убрать дублирующие строки и оптимизировать код wordpress сайта. Если вы знаете еще какие-то дополнительные хаки или у вас имеются замечания по текущим, пишите в комментариях.
Понравился пост? Подпишись на обновления блога по
RSS,
Email или
twitter!

Оцените статью:
(голосов — 42, средний балл: 5,26 из 7)
Категории: Оптимизация; Хаки и секреты;
Теги: оптимизация блога, оптимизация кода, правка плагинов, правка шаблона, улучшаем блог, ускорение блога.
Похожие статьи:
- Как отключить emoji в WordPress
- Получение и отображение первой картинки поста
- Как убрать category в WordPress категориях — зачем это делать, плагины для реализации
- Облагораживаем страницы меток и тегов в wordpress
- Хак для Maxcache — как сделать seo title в wordpress без плагина
Как изменить секцию head сайта на WP+WC+Elementor?
Друзья, проблема в следующем. Есть сайт на WP+WC+Elementor. Есть кастомные header и footer, созданные в элементоре — это понятно. Вношу изменения в код секции head в файле header.php, они успешно сохраняются, однако при просмотре кода сайта в браузере их как не бывало. Тут на ум только одно приходит — head тоже каким то путём подтягивается из конструктора. Вообще не люблю Elementor, поэтому плохо его понимаю, но тут надо разобраться.
Помогите понять, откуда берётся head без моих изменений. И как вообще вносить изменения в шаблоны в таком случае?
Спасибо
- Вопрос задан более трёх лет назад
- 438 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 1
Parovozik1223 @Parovozik1223

В моём случаи header.php перетирал вот этот файл
Ответ написан более двух лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- WordPress
Не могу понять, как отобразить поле ввода пароля с кнопкой в одну линию?
- 1 подписчик
- 2 часа назад
- 15 просмотров
Изменение мета данных в wp_head (WordPress)
В вордпрессе есть такая функция wp_head(), выводящая данные в раздел head. Так вот, эта функция выводит и title meta-description. А что если надо создать отдельный шаблон вывода мета для отдельной рубрики, и не хочется переделывать весь сайт чтоб шаблон можно было задавать плагином Yoast SEO, который успешно с этим справляется, только надо вынести рубрику в отдельный тип записи.
Для этого воспользуемся перехватом вывода данных функции wp_head(), тоесть запретим ей вывод и результат направим в буфер обмена, а потом из буфера обмена в функцию по обработке результата.
Вывод wp_head помещаем в буфер и обрабатываем функцией
cat_ID; global $title_; $title_ = esc_html(get_the_title()); function rain_head($buffer) < global $category_id; global $title_; global $rain_url; if (($category_id == 20)&&(strpos($rain_url, '/category/vrachi/') === false))< $x1 = strpos($buffer, ''); $x2 = strpos($buffer, ' '); $old_title = substr($buffer, $x1, $x2+8); $new_title = 'Врач - '.$title_.' (из Германии) '; $buffer = str_replace($old_title,$new_title,$buffer); > return $buffer; > ob_start("rain_head"); wp_head(); ob_end_flush(); ?>
Теперь по подробней.
Обворачиваем wp_head() функциями ob_start(«rain_head») и ob_end_flush(), для того чтобы перехватить данные и отправить результат в функцию по обработке результата rain_head().
Шаблон должен применяться ко все записям рубрики, НО не применяться к странице рубрики.
для этого создано условие
if (($category_id == 20)&&(strpos($rain_url, '/category/vrachi/') === false))$category_id — проверяем на вхождение записи в оптеделенную рубрику
$rain_url — указываем что урл не должен содержать основную рубрику (это зависит от того как настроен проект, возможно, такого делать и не надо)
Примечание
Данный пример не является аксиомой изменения мета в функции wp_head(), а только как один из десятка вариантов.
Вывод wp_head назначаем переменной
Тут делаем тоже самое, но результат буфера загоняем в переменную
ob_start(); wp_head(); $head = ob_get_clean(); echo $head;Получив результат работы функции wp_head() в переменной, можно с переменной уже делать что угодно и потом выводить.
Редактировать шапку сайта wp
Помогите пожалуйста , как отредактировать шапку сайта , хочу внести в нее данные обратной связи - скайп , icq , почта , мобильный тема :cuztomizr подскажите может как изменить краткое описание на ссылки или , где находится код ответственный за это хочу на месте краткого описания установить средства обратной связи , при этом не сбив меню
- eTarget 2011:Панельная дискуссия «Стратегия и планирование рекламной кампании в интернете»
- eTarget 2011: Круглый стол «Реклама в онлайн-видео»
- Могут ли «плохие» входящие ссылки привести к ухудшению ранжирования?
На сайте с 03.09.2008
3 января 2015, 08:03
zirg, html+css вам в помощь.
открываете header.php вашего шаблона и начинаете править.
На сайте с 02.01.2015
3 января 2015, 11:51
SEOKinG:
zirg, html+css вам в помощь.
открываете header.php вашего шаблона и начинаете править.
Знаний у меня особо нету ,но что то как не пробывал , все появляется либо ниже , либо выше , в том месте ,котором хочу , на месте "краткого описания" ничего не выходит
* The Header for Customizr.
* Displays all of the section and everything up till
* @since Customizr 1.0
//the '__before_body' hook is used by TC_header_main::$instance->tc_head_display()
// The '__header' hook is used with the following callback functions (ordered by priorities) :
//TC_header_main::$instance->tc_logo_title_display(), TC_header_main::$instance->tc_tagline_display(), TC_header_main::$instance->tc_navbar_display()
//This hook is used for the slider : TC_slider::$instance->tc_slider_display()
