Новичкам в миреWordPress бывает тяжело в полной мере понять, насколько разным и податливым может быть WordPress. Конечно, вам доступны буквально десятки тысяч тем и плагинов и, наверное, кажется, что WordPress почти безграничен, но если вы ничего не знаете об action- и filter-хуках, то будете удивлены насколько больше вы можете сделать с помощью этой удивительной системы управления контентом.
Смотрите также:
- Руководство по URL перенаправлениям для WordPress сайтов
- Перенаправление на заданную страницу в зависимости от роли пользователя WordPress
- Как перенаправлять пользователей на случайную запись в WordPress
- Как обновить URL-ы при переносе WordPress-сайта
- Как сохранить ваши WordPress-ссылки при смене структуры Permalink-ов
В этом руководстве мы расскажем об использовании фильтров WordPress чтобы изменить страницу переадресации после разных действий.
Приступим!
Как настроить WordPress с помощью хуков Actions и Filters
Прочитав вступление, вы наверняка думаете, что мы преувеличиваем. Можем вас заверить, что нет. Без тени сомнений, хуки являются основной причиной такой гибкости WordPress. Без системы хуков, не только темы были бы более «жесткими», но и, что более важно, многих плагинов WordPress бы просто не существовало. Разработчики придумывали бы меньше плагинов и тем, а мир WordPress был бы очередной скучной системой управления контентом.
Смысл названия хуков (с английского — крюки, зацепки) очень даже правильный. Они как бы цепляются за определенные функции WordPress. Хуки действия (Actions) выполняют функции до либо после определенного действия, а хуки фильтров (Filters) обрабатывают данные перед их выводом. (В этой статье мы сфокусируемся на фильтрах.) Вот почему большинство плагинов в управлении WordPress полагаются на хуки, а в темах создаются собственные хуки для других плагинов, чтобы позволить им расширять темы.
Нам не удалось найти достоверную информацию о первом появлении хуков в WordPress, но в анонсе версии 1.2 на WordPress.org было объявлено о создании новой архитектуры плагинов и сказано, что «теперь плагины можно привязывать почти к каждому действию на WordPress». И если это было первым упоминанием хуков WordPress, то можно считать, что они родились весной 2004, на год позже появления на свет первой версии WordPress.
Если вы хотите узнать больше о действиях и фильтрах WordPress, у нас есть статьи на эту тему: 50 Filters of WordPress и 50 Actions of WordPress.
Управление переадресацией WordPress для разных ситуаций
Как и обещали, сейчас мы расскажем о фильтрах. Сегодня мы рассмотрим 7 из них: 2 для входа и выхода из системы, 1 для сброса пароля, 1 для комментариев и 2 для недавно обновленного свойства «Press This».
Примечание: Вы можете использовать фрагменты кода из этой статьи в файле functions.php вашей темы, чтобы быстрее научиться использовать хуки, но не лучшей идеей будет редактировать файлы темы для улучшения функциональных возможностей. Вместо этого, лучше создать плагин специально под вашу тему.
Перенаправление пользователей после успешной регистрации
Обычно, новых пользователей переадресовывают к странице с таким уведомлением: «Регистрация завершена. Пожалуйста, проверьте вашу электронную почту». Мы можем это изменить с помощью фильтра registration_redirect.
Допустим, вы хотите представить технические характеристики вашего продукта новым пользователям. Используя представленный ниже фрагмент кода, вы можете отправить пользователя на страницу со ссылкой для их скачивания:
<?php add_filter( 'registration_redirect', 'redir_new_users' ); function redir_new_users() { // change the slug below with your own page's slug return home_url( '/white-paper/' ); } ?>
Отредактируйте «white-paper» на префикс своей страницы и готово!
Перенаправление пользователей после входа и выхода из системы
После каждого входа пользователей переадресовывает в Консоль. Если по какой-то причине вашим пользователям не нужно её видеть, вы можете оставить их на фронтэнде сайта с помощью фильтра login_redirect.
В следующем примере мы проверим роль пользователя и перенаправим только Подписчиков к начальной странице:
<?php add_filter( 'login_redirect', 'send_subscribers_home', 10, 3 ); function send_subscribers_home( $location, $request, $user ) { global $user; if ( isset( $user->roles ) && is_array( $user->roles ) ) { if ( in_array( 'subscriber', $user->roles ) ) { return home_url(); } else { return $redirect_to; } } return; } ?>
Такую же функцию имеет и фильтр logout_redirect. Только вместо отправки пользователей к начальной странице, вы можете отправить их к «прощальной» странице, где они смогут подтвердить выход:
<?php add_filter( 'logout_redirect', 'goodbye_subscribers', 10, 3 ); function goodbye_subscribers( $location, $request, $user ) { global $user; if ( isset( $user->roles ) && is_array( $user->roles ) ) { if ( in_array( 'subscriber', $user->roles ) ) { // change the slug below with your own page's slug return home_url( '/goodbye/' ); } else { return $redirect_to; } } return; } ?>
Перенаправление пользователей после сброса пароля
По умолчанию, пользователи, которые ввели свои логины или имейлы в поле «Смена пароля», переадресовываются назад к электронному бланку регистрации с уведомлением проверить электронную почту для смены пароля. А фильтр lostpassword_redirect может помочь нам изменить эту страницу.
Для большинства веб-сайтов WordPress уведомления «Проверьте ваш почтовый ящик и перейдите по ссылке, указанной в письме» вполне достаточно, но если вам нужно добавить информацию о смене пароля (например: «Проверьте папку спам» или «Позвоните по этому номеру, если вы не получили письмо»), вы можете отправить пользователя на специальную страницу:
<?php add_filter( 'lostpassword_redirect', 'lostpassword_message' ); function lostpassword_message( $location ) { // change the slug below with your own page's slug return '/lost-password-notice/'; } ?>
Перенаправление пользователей после оставления комментариев
С помощью фильтра comment_post_redirect вы можете изменить страницу, на которую попадает пользователь после того, как оставит комментарий.
Это, наверное, лучший совет в этом списке, поскольку помогает увеличить количество подписчиков на новостные рассылки. Например, вы можете отправить их на страницу «Спасибо за комментарий, и не забудьте подписаться на наши новости» используя следующие строки кода:
<?php add_filter( 'comment_post_redirect', 'redirect_to_newsletter' ); function redirect_to_newsletter( $location ) { // change the slug below with your own page's slug return '/subscribe-to-our-newsletter/'; } ?>
Перенаправление пользователей после использования «Press This»
«Press This» — это простой инструмент для быстрой публикации или сохранения записей, но он имеет некоторые ограничения. К примеру, после использования «Press This» вас возвращает к странице, которой вы делитесь, во всплывающем окне в то время, как та страница уже открыта в браузере. Странно, мы знаем.
К счастью, мы можем изменить это с помощью фильтров press_this_redirect_in_parent и press_this_save_redirect. Использование следующего кода заставит инструмент «Press This» закрыть всплывающие окна (первый фильтр) и вернет вас на начальную страницу вашего сайта (второй фильтр):
<?php // use the built-in __return_true() WordPress function to simply return a "true" boolean statement add_filter( 'press_this_redirect_in_parent', '__return_true' ); // return the home URL to redirect the author to the homepage add_filter( 'press_this_save_redirect', function( $url, $id, $status ) { return home_url(); }, 10, 3 ); ?>
Маленькая подсказка: Вы заметили, что мы используем анонимную функцию? Вы можете создать анонимную функцию PHP, если ваш сервер работает с PHP от версии 5.3.0.
Итоги
Система хуков является одним из наиболее функциональных свойств WordPress, и помогает создавать огромное количество отличных плагинов и тем. Не побоимся сказать, что без хуков действий и фильтров WordPress вряд ли использовался бы для создания каждого четвёртого веб-сайта. И хотим поблагодарить того, кому в голову пришла эта идея.
А что вы думаете о фильтрах, описанных выше? Может, вы знаете им лучшее применение? Или мы пропустили какой-то классный хук? Поделитесь своими мыслями, опытом и идеями в комментариях. И если вам понравилась эта статья, делитесь ею с друзьями и коллегами!
Комментарии к записи: 1
А про «Спасибо за комментарий» по русски и более доходчиво для новичка где можно почитать? Спасибо!