Итак, вы только что установили свой сайт на WordPress (условимся, что наш WordPress на русском языке, если нет — то будет одним хуком меньше). Также будем считать, что вы уже определились с темой, которую будете использовать, либо же вы решили создать свою собственную тему — одно из двух.
В этом посту я перечислю не просто хуки, «которые прикольные», а хуки, которые необходимы к установке на каждый WordPress-сайт. Надеюсь, благодаря моим постам, ваши сайты (и все сайты рунета) станут чуточку лучше.
Если вы хотите, чтобы вместо «Опубликовано 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.
Если при авторизации допустить ошибку при вводе логина или пароля, WordPress указывает, что именно было введено неправильно. Например «ОШИБКА: Неверное имя пользователя.» или «ОШИБКА: Введённый вами пароль пользователя admin неверен.»
Для того, чтобы WordPress не сообщал лишней информации, мы на оба случая сделаем общее сообщение об ошибке, вставив следующий код в functions.php
.
function true_change_default_login_errors(){ return '<strong>ОШИБКА</strong>: Вы ошиблись при вводе логина или пароля.'; } add_filter( 'login_errors', 'true_change_default_login_errors' );
Подробнее о замене сообщений об ошибках вы можете почитать здесь.
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; }
Отлично борется с автоматическим спамом, результат — менее 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');
Этот хук позволит удалить все имена пользователей из 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');
После добавления этого кода в 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' );
По умолчанию можно узнать версию установленного на сайте 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');
Подробнее здесь.
Если вы сделали кому-то сайт, то в футер можно добавить ненавязчивое сообщение, что разработкой занимались вы.
function true_change_admin_footer () { $footer_text = array( 'Спасибо вам за творчество с <a href="http://wordpress.org">WordPress</a>', 'Разработал <a href="https://misha.agency" target="_blank">Миша Рудрастых</a>' ); return implode( ' • ', $footer_text); } add_filter('admin_footer_text', 'true_change_admin_footer');
В итоге получим:
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
За первый спасибо) Все хотел заморочиться этим вопросом, да некогда было.
Хорошая подборка, ставлю лайк
Я бы еще добавил хук на очистку wp_head от мусора и удаление версий css и js файлов.
http://n-wp.ru/24135 - взято от сюда, а ссылки нет
Если посмотреть на дату публикации моей статьи и их, то это им надо ссылку на меня ставить.
Я начинаю создавать свой сайт. Возникают вопросы. Очень приятно, что поисковики выдают ответы, где Ваши советы на первой странице результатов поиска.
Добрый день, Ваши советы,
Желаю вам удачи! 💪
Пункт №3 в коде лишняя скобка. Конечно публикация уже старенькая, но всё же. А кстати есть может апдейты по теме?
Спасибо,
Да, апдейт конечно нужен, думаю займусь этим. Если коротко, то 1-й и 4-й пункт сейчас бессмысленны. Но думаю я знаю ещё пару хуков, которые добавил бы сюда.