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

Итак, вы только что установили свой сайт на WordPress (условимся, что наш WordPress на русском языке, если нет — то будет одним хуком меньше). Также будем считать, что вы уже определились с темой, которую будете использовать, либо же вы решили создать свою собственную тему — одно из двух.

В этом посту я перечислю не просто хуки, «которые прикольные», а хуки, которые необходимы к установке на каждый WordPress-сайт. Надеюсь, благодаря моим постам, ваши сайты (и все сайты рунета) станут чуточку лучше.

1. Склонение дат на сайте

Если вы хотите, чтобы вместо «Опубликовано 31 Декабрь 2013» у вас отображалось «Опубликовано 31 декабря 2013», тогда этот хук обязателен к установке:

function true_russian_date_forms($the_date = '') {
	if ( substr_count($the_date , '---') > 0 ) {
		return str_replace('---', '', $the_date);
	}
	// массив замен для русской локализации движка и для английской
	$replacements = array(
		"Январь" => "января", // "Jan" => "января"
		"Февраль" => "февраля", // "Feb" => "февраля"
		"Март" => "марта", // "Mar" => "марта"
		"Апрель" => "апреля", // "Apr" => "апреля"
		"Май" => "мая", // "May" => "мая"
		"Июнь" => "июня", // "Jun" => "июня"
		"Июль" => "июля", // "Jul" => "июля"
		"Август" => "августа", // "Aug" => "августа"
		"Сентябрь" => "сентября", // "Sep" => "сентября"
		"Октябрь" => "октября", // "Oct" => "октября"
		"Ноябрь" => "ноября", // "Nov" => "ноября"
		"Декабрь" => "декабря" // "Dec" => "декабря"
	);
	return strtr($the_date, $replacements);
}
 
// если хотите, вы можете приминить только некоторые из фильтров
add_filter('the_time', 'true_russian_date_forms');
add_filter('get_the_time', 'true_russian_date_forms');
add_filter('the_date', 'true_russian_date_forms');
add_filter('get_the_date', 'true_russian_date_forms');
add_filter('the_modified_time', 'true_russian_date_forms');
add_filter('get_the_modified_date', 'true_russian_date_forms');
add_filter('get_post_time', 'true_russian_date_forms');
add_filter('get_comment_date', 'true_russian_date_forms');

Функция склонения дат будет работать как для постов и страниц, так и для комментариев WordPress.

2. Сообщения об ошибках при попытке авторизации пользователя на сайте

Если при авторизации допустить ошибку при вводе логина или пароля, WordPress указывает, что именно было введено неправильно. Например «ОШИБКА: Неверное имя пользователя.» или «ОШИБКА: Введённый вами пароль пользователя admin неверен.»

Для того, чтобы WordPress не сообщал лишней информации, мы на оба случая сделаем общее сообщение об ошибке, вставив следующий код в functions.php.

function true_change_default_login_errors(){
	return '<strong>ОШИБКА</strong>: Вы ошиблись при вводе логина или пароля.';
}
 
add_filter( 'login_errors', 'true_change_default_login_errors' );

Подробнее о замене сообщений об ошибках вы можете почитать здесь.

3. Защита от вредоносных URL-запросов

if (strpos($_SERVER['REQUEST_URI'], "eval(") ||	strpos($_SERVER['REQUEST_URI'], "CONCAT") || strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||	strpos($_SERVER['REQUEST_URI'], "base64")) {
	@header("HTTP/1.1 400 Bad Request");
	@header("Status: 400 Bad Request");
	@header("Connection: Close");
	@exit;
}

4. Защита от автоматического спама

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

function true_stop_spam( $commentdata ) {
	$fake = trim($_POST['comment']); // обычное поле комментирования мы скроем через CSS
	if(!empty($fake)) // заполнение его роботами будет приводить к ошибке, комментарий отправляться не будет
		wp_die('Спамный коммент!'); 
	$_POST['comment'] = trim($_POST['true_comment']); // затем мы присвоим ему значение поля комментария, которое для людей
	return $commentdata;
}
 
add_filter('pre_comment_on_post', 'true_stop_spam');

5. Скрываем имена пользователей из HTML-кода комментариев

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

function true_remove_css_class( $classes ) {
	foreach( $classes as $key => $class ) {
		if(strstr($class, "comment-author-")) {
			unset( $classes[$key] );
		}
	}
	return $classes;
}
add_filter('comment_class', 'true_remove_css_class');

6. Запрет пингбэков и трэкбэков на самого себя

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

function true_disable_self_ping( &$links ) {
	foreach ( $links as $l => $link )
		if ( 0 === strpos( $link, get_option( 'home' ) ) )
 			unset($links[$l]);
}
 
add_action( 'pre_ping', 'true_disable_self_ping' );

7. Скрываем версию WordPress

По умолчанию можно узнать версию установленного на сайте WordPress, заглянув в исходный HTML-код или в код RSS. Для того, чтобы не предоставлять злоумышленникам лишней информации, вставляем это в funcions.php:

function true_remove_wp_version_wp_head_feed() {
	return '';
}
 
add_filter('the_generator', 'true_remove_wp_version_wp_head_feed');

Подробнее здесь.

8. Ставим ссылку на себя в футере в админке

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

function true_change_admin_footer () {
	$footer_text = array(
		'Спасибо вам за творчество с <a href="http://wordpress.org">WordPress</a>',
		'Разработал <a href="https://truemisha.ru" target="_blank">Миша Рудрастых</a>'
	);
	return implode( ' &bull; ', $footer_text);
}
 
add_filter('admin_footer_text', 'true_change_admin_footer');

В итоге получим:

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

Ещё несколько полезных хуков:

Комментарии 5

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...