Статьи

Управление перенаправлениями в 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: один для регистрации, два для входа и выхода, один для сброса пароля, один для комментариев и два для недавно обновленной функции «Нажмите это».

Примечание. Вы можете использовать фрагменты кода в этом руководстве в файле 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.

Спасибо за прочтение!