Если вы новичок в экосистеме WordPress, вам может быть немного сложно понять, насколько гибким может быть WordPress. Конечно, есть буквально десятки тысяч тем и плагинов, которые вы можете использовать, и вы можете подумать, что WordPress является чрезвычайно расширяемым, но если вы не знаете о «действиях» и «фильтрах», которые предоставляет WordPress, вы Вы будете удивлены, насколько больше вы можете сделать с этой удивительной системой управления контентом.
В этом уроке я расскажу вам, как использовать фильтры WordPress для изменения страниц для перенаправления на различные действия.
Давайте начнем!
Использование гибкости WordPress с действиями и фильтрами
С смелой проповедью, которую я дал во введении, вы можете подумать, что я немного преувеличивал Уверяю вас, я не сделал. Крюки, без тени сомнения, являются реальной причиной гибкости WordPress. Без системы хуков темы были бы более жесткими и, что более важно, большинство плагинов WordPress даже не существовало бы . Это заставит разработчиков разрабатывать меньше плагинов и тем, и мир WordPress станет намного меньше, что сделает его еще одной унылой системой управления контентом.
Крючки предназначены для того, что они назвали в честь: перехватывать вещи. Есть два типа зацепок, зацепок за действие и зацепок для фильтра. Перехватчики действий запускают функции до или после определенных действий, а перехватчики фильтров обрабатывают данные перед их выводом. (В этом руководстве мы сосредоточимся на хуках фильтров.) Поэтому большинство плагинов полагаются на хуки для управления WordPress, а темы создают свои собственные хуки для других плагинов, чтобы позволить другим расширять темы.
Я не смог найти надежного источника, когда хуки были введены в WordPress, но в сообщении о версии 1.2 на WordPress.org интегрирована новая архитектура плагинов, в которой говорится, что «плагины теперь могут подключаться практически ко всем действиям WordPress». , Если это самое начало введения хуков WordPress, это означает, что хуки родились весной 2004 года, через год после выпуска первой версии WordPress.
Если вы хотите узнать больше о действиях и фильтрах в WordPress, у меня есть одна серия для каждого типа хуков: « 50 фильтров WordPress » и « 50 действий WordPress ». Если вы заинтересованы, не забудьте проверить их!
Управление перенаправлением WordPress для разных сценариев
Как и обещал, я собираюсь сейчас перейти к фильтрам WordPress. В этом руководстве мы изучим семь фильтров WordPress: один для регистрации, два для входа и выхода, один для сброса пароля, один для комментариев и два для недавно обновленной функции «Нажмите это».
 Примечание. Вы можете использовать фрагменты кода в этом руководстве в файле functions.php вашей темы, чтобы быстро их использовать, но редактирование файлов темы в целях функциональности считается плохой практикой.  ( Ознакомьтесь с моим руководством по «территории плагинов». ) Вместо этого вы должны создать для этого плагин для конкретного сайта.  ( Посмотрите видеоурок Рэйчел о создании плагина. ) 
Перенаправление пользователя после успешной регистрации
  Обычно новые пользователи перенаправляются в форму входа с таким уведомлением: «Регистрация завершена. Проверьте свою электронную почту».  С помощью фильтра registration_redirect мы изменим это. 
Допустим, у вас есть специальный технический документ о вашей области знаний, и вы предлагаете его новым пользователям на своем веб-сайте. Используя приведенный ниже фрагмент кода, вы можете отправить новых пользователей на страницу со ссылкой для загрузки на свой технический документ:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
 | 
 <?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 . 
В следующем примере мы собираемся проверить роль пользователя и перенаправить «подписчиков» на домашнюю страницу:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
 | 
 <?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 фильтра logout_redirect .  Вместо того, чтобы отправлять их на домашнюю страницу, вы можете перенаправить их на «до свидания» страницу, где они могут подтвердить, что они вышли из системы: 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
12 
13 
14 
15 
16 
17 
18 
 | 
 <?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, но если вам нужно поделиться дополнительной информацией о процессе сброса паролей (например, «Проверить папку со спамом» или «Позвоните по этому номеру, если у вас нет»). У меня нет электронной почты «), вы можете перенаправить пользователей на определенную страницу:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
 | 
 <?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 позволяет вам изменить страницу, на которую переходят ваши комментаторы после отправки комментария. 
Это может быть лучшим советом в этом уроке, потому что это может увеличить количество подписчиков вашей рассылки. Например, вы можете отправить их на страницу «Спасибо за комментарии и не забудьте подписаться на нашу рассылку», используя следующие строки кода:
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
 | 
 <?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_redirect_in_parent и press_this_save_redirect .  Использование следующего кода заставит инструмент «Нажать на это» закрыть всплывающее окно (первый фильтр) и вернуться на домашнюю страницу вашего собственного сайта (второй фильтр): 
| 
 01 
02 
03 
04 
05 
06 
07 
08 
09 
10 
11 
 | 
 <?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 ); 
?> 
 | 
Micro tip: Вы заметили, что я использовал анонимную функцию ? Правильно: вы можете передать анонимную функцию PHP, если ваш сервер работает под управлением PHP v5.3.0 или новее.
Заворачивая все
Система «хуков» является одной из самых мощных функций WordPress, и она помогла сообществу создать гигантскую массу великолепных плагинов и тем, которые мы используем сегодня. Без «ловушек действий» и «ловушек фильтров», вероятно, было бы невозможно достичь такого уровня расширяемости. И я думаю, можно с уверенностью сказать, что без этих хуков WordPress не будет использоваться в каждом четвертом веб-сайте . Кто бы ни придумал идею этих «крючков», спасибо!
Что вы думаете о фильтрах, которые мы прошли в этом уроке? Можете ли вы придумать лучшие варианты использования для них? Или вы думаете, я пропустил крючок, который можно было бы упомянуть в этом посте? Поделитесь своими мыслями, опытом и идеями с нами в разделе комментариев ниже. И если вам понравилось читать эту статью, не забудьте поделиться ею с друзьями и коллегами!
По всем вопросам, не связанным с этой статьей, вы можете связаться со мной по адресу @BarisUnver_EN (английский) и @BarisUnver (турецкий) в Twitter.
Спасибо за прочтение!