Полезные хуки для WordPress

Автор блога
Андрей WPM

Андрей WPM

Список хуков для WordPress движка.

Привет, друзья! Решил с вами поделиться несколькими хуками для WordPress, которыми я систематически сам пользуюсь. Думаю, они вам будут тоже полезны. Так что, сегодня мы с вами будем "кавырять" код темы и оптимизировать его в плане seo. Но будем это делать так, чтобы при обновлении темы всё не затерлось. Давайте для начала разберемся что такое хуки для WordPress и для чего они вообще!?

Хук для ВордПресс – это специальная функция, которая помогает прицепиться "на лету" к основным функциям и изменить их поведения. Это что-то вроде вкраплений. Вы ловите нужную функцию, изменяете её данные как вам надо и воспроизводите её уже измененную. При этом, вы как бы не изменяете код темы или самого движка, а по факту изменения происходят. И любые обновления темы или движка WP, не смогут затронуть ваши изменения.

Для CMS WordPress существует достаточно большое количество хуков на 2019 год. В этой статье, я физически не смогу уместить их все. Да и честно говоря, я ещё знаю не все. Поэтому покажу вам только те, которые я знаю и которые будут вам полезны в первую очередь. Далее в статье, вы найдете список хуков, которые помогут вам избавиться от некоторых базовых "сео ошибок", без изменение кода шаблона или движка.

Я не зря обрамил фразу "сео ошибки" в кавычки. Для англоязычного интернета, это вовсе не считается ошибками. Но мы же, обязаны подстраиваться не только под поисковую систему Google, но и под Яндекс тоже. А как известно, Яндекс относиться к определенным стандартам по другому. И чтобы угодить и тому и другому, мы и будем сегодня колдовать. Давайте уже приступим, а то заболтался я что-то.

 

Отключение замены на "Умные кавычки".

Наверняка вы уже столкнулись с проблемой, что WordPress по умолчанию показывает вместо простых кавычек, так называемые "Умные кавычки". И всё бы ничего, только в тексте, если не поставить пробел перед кавычкой показывается только закрывающая. В итоге, выглядит это не очень красиво. Приведу пример...

Вы в тексте решили написать какой-то текст с кавычками, например: rel="canonical". Вроде написали с нормальными двойными кавычками. Но при публикации статьи, вы видите следующее: rel=»canonical». Как то не красиво, согласны?

Существует 2 способа избавиться от таких "Умных кавычек" (их ещё называют французскими кавычками):

  1. Ставить перед каждой открывающей кавычкой пробел (rel= «canonical»). Но это как-то не красиво всё равно выглядит.
  2. Отключить автоматическую замену кавычек специальным хуком. В этом случае, все кавычки будут именно такими, какими вы их хотите видеть.

Итак, хук который отключит автоматические "Умные кавычки" нужно поместить в файл функций functions.php вашей темы.

//Отключаем замену на Умные кавычки в тексте, заголовках и комментах.
remove_filter('the_content', 'wptexturize');
remove_filter('the_title', 'wptexturize');
remove_filter('comment_text', 'wptexturize');

 

Выравнивание текста по ширине.

Эта опция изначально заложена в движок по умолчанию. Но по каким-то необъяснимым причинам, её посчитали не особо нужной и отключили. Если вы зайдете в редактор статей, то увидите 3 кнопки выравнивания текста, это:

  1. С левой стороны.
  2. По центру.
  3. С правой стороны.

Данный хук активирует четвертую функцию – Выравнивание по ширине. Как вы можете заметить, у меня на блоге весь текст выравнен с обоих сторон и сделано это напрямую в стилях темы. Но если же вы не готовы к такому стилю, но нужно какие-то отдельные блоки в тексте всё-таки выравнивать, тогда данный хук, то что вам нужно.

Чтобы активировать данную функцию, вам необходимо добавить следующий код в файл функций functions.php или же создать отдельный плагин для этого.

// выравнивание по ширине
function add_more_buttons($buttons) {
 $buttons[] = 'alignjustify';
 return $buttons; }
add_filter("mce_buttons_2", "add_more_buttons");

 

Отключение Google шрифтов.

Обычно, темы подключают сторонние Google шрифты, на что даже сам Google ругается smile . Забавно получается. Так вот, зачастую отключая эти сторонние шрифты, сайт ни чуть не изменяется. Разве что шрифт становиться четче. Ну, конечно если у вас на сайте не подключен какой-нибудь "заковырестый" шрифт. В этом случае, он просто пропадет и будет показываться обычный, стандартный шрифт.

Плюс данного метода – Вы избавляетесь от стороннего подключения. Тем самым, уменьшая время загрузки страницы. Что безусловно будет плюсом для вашего сайта.

Минус – У разных пользователей на компьютере, могут быть разные шрифты по умолчанию. Поэтому шрифт на сайте для разных пользователей, может быть разным. Но! Не стоит на это обращать внимание, так как сейчас уже, практически на каждом компьютере, установлены стандартные наборы шрифтов. Поэтому, не парьтесь smile .

Чтобы отключить поддержку встроенных Гугл шрифтов, нужно добавить в тот же файл функций следующий код:

function remove_styles () {				
wp_deregister_style ('XXX-google-font'); 
// где XXX – название вашей темы.			
}
add_action ('wp_print_styles','remove_styles',100);

 

Удаление заголовков H2-H6 из сайдбаров.

Сначала прочитайте до конца, потом делайте.

Я уже упомянул, что Google в большинстве случаев относиться к множеству заголовков H2-6 на страницах, лояльно. А вот Яндекс не особо. Да и вообще, опытные сеошники, рекомендуют не увлекаться этими тегами в тех местах, где они не нужны. А заголовки в сайдбарах, это те места, где они не нужны точно.

Я активно пользуюсь всеми заголовками в разметке статей. Но вот в сайдбарах, я рекомендую убирать их, за ненадобностью. По умолчанию, разработчики тем выводят заголовки в сайдбарах с помощью тегов H2-6. В разных темах, теги могут быть разные. У меня были теги H4, у вас могут быть и H3 или даже H2. Выглядит код регистрации боковых колонок примерно вот так:

register_sidebar( array(
	'name'          => esc_html__( 'Right Sidebar', 'XXX' ),
	'id'            => 'XXX_right_sidebar',
	'description'   => esc_html__( 'Show widgets at Right side', 'XXX' ),
	'before_widget' => '<aside id="%1$s" class="widget %2$s">',
	'after_widget'  => '</aside>',
	'before_title'  => '<h4 class="widget-title"><span>',
	'after_title'   => '</span></h4>',
) );
// Где ХХХ – название вашей темы.

Чтобы переделать вывод заголовков, мало просто найти подобный код и поменять h4 на div. Потому-что при следующем обновлении темы, ваши правки кода затрутся и придется делать это заново. А если вы много чего уже делали в шаблоне, вы попросту можете не вспомнить про это.

Чтобы такого не повторялось, я рекомендую сделать три вещи:

  1. Обязательно установить и настроить дочернюю тему.
  2. Отключить регистрацию старых сайдбаров и подключить новые.
  3. И всё это сделать в файле functions.php дочерней темы.

Итак, для начала надо отключить регистрацию старых сайдбаров в теме. Для этого в файле functions.php прописываем следующий хук:

function remove_some_widgets(){
	unregister_sidebar( 'XXX_right_sidebar' );
	//unregister_sidebar( 'название_виджета' );
}
add_action( 'widgets_init', 'remove_some_widgets', 11 );

Я специально даю вам код именно в виде функции, так как этой функцией можно отключить сразу несколько сайдбаров. Чтобы узнать точное название сайдбаров, нужно найти функцию подключения их в теме и подсмотреть там. Обычно, их регистрируют в файле functions.php родительской темы, либо в отдельном файле (он может называться либо widget, либо sidebar). Функция регистрации называется register_sidebar.

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

function wpmaster_widgets_init() {
	register_sidebar( array(
		'name'          => esc_html__( 'Right Sidebar', 'XXX' ),
		'id'            => 'XXX_right_sidebar',
		'description'   => esc_html__( '', 'XXX' ),
		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
		'after_widget'  => '</aside>',
		'before_title'  => '<div class="widget-title">',
		'after_title'   => '</div>',
	) );
}
add_action( 'widgets_init', 'wpmaster_widgets_init', 11 );

Не забудьте поменять XXX на название вашей темы. После сохранения в сайдбарах поменяются все заголовки на дивы. Но! Если вы откроете сайт сейчас, то сайдбаров вы не увидите. Вам нужно будет перейти в админку и заново добавить нужные виджеты в новый раздел сайдбара. После этого останется добавить стилей заголовкам, чтобы они выглядели прилично. О том, как добавлять стили нужным элементам, я писал в статье – Оформление текста на сайте.


 

Отключение ненужных виджетов.

По умолчанию в WordPress включены виджеты, которыми мало кто пользуется. А некоторые из них, вообще создают огромное количество дублей страниц, что в свою очередь может привести к наказаниям от поисковых систем. Именно по этой причине, я рекомендую отключить ненужные виджеты. Этим вы выиграете сразу по нескольким пунктам:

  1. Избавитесь от возможных дублей страниц (обычно их генерирует виджет Календарь).
  2. Уменьшите число обращений к базе данных (обращается к БД каждый виджет).

Как я уже упомянул, каждый виджет по умолчанию, обращается к базе данных. При чем это происходит не зависимо от того, используется он на странице или нет. То есть, каждый раз, как загружается страница (любая на сайте), каждый виджет обращается по минимум одному разу к базе данных. Отключив не использующие, вы немного ускорите загрузку своего сайта. А теперь, давайте посмотрим как это делается:

add_action('widgets_init', 'unregister_basic_widgets' );
function unregister_basic_widgets() {
	unregister_widget('WP_Widget_Pages');            // Виджет страниц
	unregister_widget('WP_Widget_Calendar');         // Календарь
	unregister_widget('WP_Widget_Archives');         // Архивы
	unregister_widget('WP_Widget_Meta');             // Мета виджет
	unregister_widget('WP_Widget_Search');           // Поиск
	unregister_widget('WP_Widget_Text');             // Текст
	unregister_widget('WP_Widget_Recent_Posts');     // Последние записи
	unregister_widget('WP_Widget_RSS');              // RSS
	unregister_widget('WP_Widget_Tag_Cloud');        // Облако меток
}

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


 

Удаление файлов license.txt и readme.html.

При каждом обновлении движка WordPress, в корневой папке сайта появляются эти два файла. И сколько бы вы не удаляли их, после каждого обновления они будут появляться. На первый взгляд, они не представляют собой угрозы, но для товарищей, которые намерены взломать ваш сайт, они являются чуть ли не открытой дверью. Поэтому, для защиты сайта от взлома, рекомендуется удалять эти файлы из корневой папки. Чем мы и займемся в этом разделе.

Чтобы автоматически проверять наличие файлов license.txt и readme.html, а потом их сразу удалять, воспользуйтесь ниже представленным хуком. Он будет автоматически проверять на наличие этих файлов и если они присутствуют, хук удалит их. Код нужно поместить, в тот же файл functions.php:

if( is_admin() && ! defined('DOING_AJAX') ){
$license_file = ABSPATH .'/license.txt';
$readme_file = ABSPATH .'/readme.html';
if( file_exists($license_file) && current_user_can('manage_options') ){
$deleted = unlink($license_file) && unlink($readme_file);
if( ! $deleted  )
	$GLOBALS['readmedel'] = 'Не удалось удалить файлы: license.txt и readme.html из папки `'. ABSPATH .'`. Удалите их вручную!';
else
	$GLOBALS['readmedel'] = 'Файлы: license.txt и readme.html удалены из из папки `'. ABSPATH .'`.';
add_action( 'admin_notices', function(){  echo '<div class="error is-dismissible"><p>'. $GLOBALS['readmedel'] .'</p></div>'; } );
}
}

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


 

Создание своих миниатюр и удаление лишних.

Вы наверняка уже знаете, что WordPress по умолчанию, создает для каждой загруженной картинки 3 версии миниатюр. Плюс к этому, каждая тема, создает ещё от трех, до 7 миниатюр в добавок. И того, для каждой картинки создается до 10 дополнительных. А если у вас на сайте картинок очень много, то в скором времени, ваш сайт разрастется до немыслимых размеров и вам придется увеличивать тариф хостинга.

Чтобы отсрочить переезд на другой тариф, вам нужно отключить создания дополнительных миниатюр, без которых сайт сможет спокойно функционировать. Сначала, вам нужно будет пройтись по сайту и посмотреть, какие миниатюры часто используются в шаблоне (обратить внимание на блок рекомендуемых статей, мини-слайдеры, превью статей и т.д.).

Чтобы отключить стандартные миниатюры ВордПресса, нужно перейти в Настройки > Медиафайлы. На скрине ниже, я покажу какие можно удалить, а какие нельзя:

Миниатюры WordPress

То, что отмечено красной рамкой выключать нельзя. Эта миниатюра отвечает за показ картинок в галерее WordPress. Остальные две, можно отключить поставив цифру "0".

Теперь, переходим к миниатюрам создаваемым самой темой. Для этого переходим в родительскую тему и ищем в файле functions.php регистрацию стандартных размеров. Функция регистрации называется add_image_size. Ищите эту функцию и скопируйте названия подключаемых миниатюр. После этого, вставьте эти названия в следующую функцию для их отключения:

add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ){
	return array_diff( $sizes, array(
		'XXX-about', 
		'XXX-slider-thumb',
		'XXX-team',
		'XXX-featured-image',
	) );
}
// Где ХХХ-... – это название миниатюры.

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

А чтобы зарегистрировать новый размер миниатюры, вам нужно в конце выше приведенного кода добавить хук регистрации:

add_image_size( 'wpmaster-featured-image', 380, 190, true );
// Где wpmaster-featured-image – любое слово отличимое от основного.
// И размеры, изменить на нужные. Последний true – Не трогать!

 

Пересоздание миниатюр после отключения.

После того, как вы отключили лишние миниатюры и включили свою, вы не увидите разницы. Дело в том, что эти хуки отключают и подключают размеры в реальном времени. А все картинки загруженные ранее, так и остались в папке uploads. Но если у вас их там уже сотни или тысячи, то удалять их вручную, то ещё занятие. Поэтому, предлагаю установить плагин Force Regenerate Thumbnails и пересоздать миниатюры заново. Плагин автоматически удалит все лишние миниатюры и создаст только те размеры, которые вы включили.

Важно! После всех манипуляций с миниатюрами, обязательно сделайте две очень важные вещи:

  • Первым делом нужно почистить все кэши. Это касается и плагинов и кэша в браузере.
  • Вторым делом нужно пробежаться по сайту, статьям, и проверить, как отображаются картинки. Если где-то отображаются криво (сильно обрезаны и т.д.), замерьте размер и зарегистрируйте его. После этого пересоздайте ещё раз миниатюры.

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

Внимание! Могут полететь картинки в статьях. В этом случае, вам придется эти картинки передобавить. Сделать это можно кликнув на значок битой картинки в редакторе и просто передобавить. Искать заново их не надо, они уже есть, нужно будет просто нажать кнопку "Заменить".


 

Циклические ссылки в меню и категориях + rel= "canonical".

Ну, и закончить статью, можно хуками от циклических ссылок на сайте и хуком для "правильного" атрибута rel=canonical. В этой статье я их не буду дублировать (не хочу портить уникальность статей), так что, если нужно, переходите в соответствующие посты. Там по мимо этого море нужной для вас информации, раз уж решили оптимизировать WordPress, оптимизируйте его по полной!

На этом у меня сегодня всё. Как обычно, я с вами не прощаюсь и жду ваших комментариев к этой статье. До встречи, на страницах блога WPMaster.KZ

Андрей WPM
Опубликовал - Андрей WPM

Друзья, блогу нужна ваша поддержка. Если вам понравилась статья или она вам помогла решить задачу, поделитесь ею в одной из соцсетей. Этим вы поможете дальнейшему развитию. Всем активистам - спасибо!


CTRL+D

Бонус для читателей WPMaster.kz. Предлагаю познакомиться с новым разделом на блоге - Промокоды. Только самые лучшие и нужные промокоды для покупок плагинов, тем, обучения, сервисов и т.д.



15
Вопросы не по теме статьи, задавайте в разделе "Флудилка".

avatar
1000
  Подписаться  
новее старее
Уведомление о
Макс
15 комм.
Макс

На сколько оказывается вордпрес многогранен. И плагинов куча и коды всякие. Но я пока боюсь кодами пользоваться. Походу не дорос ещё. Мне кажется сейчас вставлю нитуда и потом не смогу вернуть если что-то сломается.

Светлана
2 комм.
Светлана ( babasv.com )

Создайте локальный сайт и упражняйтесь на нем, сколько захочется. Я всегда использую Open Server (есть и другие программы), прежде чем изменять что-то на сайте.

Макс
15 комм.
Макс

Так это придётся в двух местах делать. Это ж капец.

Светлана
2 комм.
Светлана ( babasv.com )

На своем компьютере, жестком диске, не меняя ОС, устанавливаете Open Server. Со своего сайта копируете все записи и прочее, затем переносите это на локальный сайт. Ваш сайт не пострадает, если на локальном создать запись, откорректировать, а затем обычным копированием перенести ее в подготовленную пустую запись. Не надо бояться, что установленный плагин не подойдет, если сначала установить его на локальном. Это отличная возможность изучить коды. Если произойдет ошибка, работу локального сайта легко восстановить с помощью заранее сохраненной копии файла, с которым вы работали. В интернете есть пошаговые инструкции (текстовые и видео) о том, как создать локальный сайт. Удачи!

Александр Каратаев
14 комм.
Александр ( obg.kz )

Правка functions.php не очень хорошая идея... Одно время я этим сильно увлекался, потом ушёл от этой затеи... Но наверное каждый должен пройти через это, свои грабли самые любимые... smile

Александр
7 комм.
Александр ( workdoma.ru )

Андрей, большое спасибо за нужную и полезную информацию! Решил проблему с умными кавычками, со шрифтами, и откл. ненужные виджиты!

Сержик
1 комм.
Сержик

Код для автоматического удаления файлов license.txt и readme.html - это только для удаления из корня сайта после обновления самой cms? Из тем и плагинов нужно удалять вручную, так как там эти файлы имеют другое расширение? Я правильно понимаю?