Редирект после авторизации в wordpress

Задача практически типовая, потому что рано или поздно может понадобиться её решить. Специфика wordpress в довольно слабой документированности частных вопросов, что иногда отбивает охоту что то на нем делать.

После авторизации со страницы /wp-login.php мы оказываемся в админке (/wp-admin). Как можно исправить данную ситуацию и попасть в какое то более полезное место на сайте? Вот несколько разных подходов.

Задание параметра GET — redirect_to
Если заглянуть в код /wp-login.php, то мы увидим, что программа проверяет наличие такого параметра как redirect_to, который указывает куда  следует перейти после авторизации. Поэтому для авторизации пользователя мы можем составить специальный url на страницу авторизации, вроде такого:

Тогда пользователи будут попадать после авторизации туда, куда нам нужно. Этот вариант не будет работать, если мы используем для авторизации какой либо запрограммированный блок с полями логин и пароль.

Исправим переменную редиректа в коде страницы wp_login.php
Это некая полумера для любителей править код движка сайта. Мы можем явно задать переменную $redirect_to в коде, в том месте где идет вызов фильтров $redirect_to = apply_filters(‘login_redirect’, $redirect_to, … Ясно, что после обновления движка ваши исправления канут в лету, поэтому, если вы собираетесь поддерживать сайт в обновленном состоянии, это не ваш вариант.

Пишем фильтр
Типично, что любой сайт часто содержит какой то специфический модуль (user plugin), в котором разработчик собирает уникальные дополнения и исправления к движку. Вот именно в такой модуль можно добавить код небольшого фильтра, выполняющего редирект после авторизации пользователя на нужную страницу. Собственно сам код.

Даже комментировать нечего, так все просто. А главное, то что это будет работать в любом случае, когда авторизация выполняется средствами движка. Дальше ничего не мешает вам сделать эту страницу настраиваемой через администрирование сайта, привязать разные страницы в зависимости от ролей пользователей и т.п.

Написать комментарий

Мало букафф? Читайте есчо !

Главная страница в wordpress

Октябрь 1, 2015 г.

Вордпресс из коробки выводит на главную страницу ленту последних записей. Как поставить на главную статическую страницу, поменять шаблон главной и некоторые ...

Читать

Обновление Inactive User Deleter — v 1.31

Май 2, 2017 г.

Кроме дополнительных фильтров, был добавлен режим удаления пользователей с оповещением по email. Новый режим позволяет не удалять пользователей ...

Читать

 

Комментарии к «Редирект после авторизации в wordpress»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Редирект после авторизации в wordpress”

  1. Владимир:

    А в какой именно файл «…cпецифического модля (user login)….» (я использую Cimy User Extra fields) и в какое место нужно добавить код этого фильтра?
    Спасибо!

    • Под «специфическим» я имел в виду какой либо самописный модуль для WP. Если у вас нет собственного кода дополняющего функционал, что тоже случается, то создайте собственный самый простейший модуль в папочке — /wp-content/plugins

      Назовите его, к примеру, mycode.php, и вставьте вначале что то вроде:
      /*
      Plugin Name: My redirect plugin
      Plugin URI: http://site.org/
      Description: Do simple tasks
      Version: 0.01
      Author: SHRA :)
      Author URI: http://shra.ru
      */

      А далее разместите тот код, что предлагается в статье. Этот код, предложенный в статье, вы можете добавить, в принципе, в любой существующий модуль. Не забудьте активировать модуль в админке сайта, что он начал работать.

  2. Владимир:

    а как создавать свой плагин?
    я создал файл пхп, записал туда эти строки.. заархивировал..
    пробую добавить через страницу Установить плагины — Загрузить , мне выдано «Архив не удалось установить. Корректных плагинов не найдено.»
    как сделать что бы плагин был корректен?

  3. login2030:

    add_filter(‘login_redirect’, ‘_myplugin_lgn_redirect’); function _myplugin_lgn_redirect() { return ‘/some-page-on-my-website’; }

    Этот код можно вставить например в function.php своей темы?

  4. Попробуйте, скорее всего — да. Я в код модуля фильтры добавляю.

  5. Виталик:

    Спасибо за статью, очень помогла!!!
    Я вставил в function.php своей дочерней темы и сработало сразу.
    Вот еще одно дополнение может кому надо будет. Logout тоже нужен был с переходом на хоум, вот функция: add_action(‘wp_logout’,create_function(»,’wp_redirect(home_url());exit();’));

  6. Виталик:

    Ах да, почему не очень хочется вставлять в модуль, потому что он тоже имеет свойство обновляться.

  7. taganrogov:

    У меня сайт потух после этого

  8. Сид:

    Спасибо, полезная фишка)

  9. Виталий:

    здесь ошибка нижнее подчеркивание
    /wp_login.php?redirect_to=/some-page-on-my-website
    надо дефис
    /wp-login.php

  10. Петр:

    Добрый день подскажите а как сделать чтобы редиректа небыло, тоесть чтобы пользователь остался на тойже странице где произвел вход. у меня на сайте вход происходит во всплывающем окне так что пользователь может быть на любой странице сайта. я попробовал такой код

    function login_redirect() {
    $Path=$_SERVER[‘REQUEST_URI’];

    return $Path;
    }
    add_filter(‘login_redirect’, ‘login_redirect’);

    но такая функция не работает, Подскажите что нужно исправить? Спасибо

    • Фактически вам нужно следующее
      1) принять данные пользователя (я так понимаю у вас уже есть форма авторизации)
      2) отправить эти данные по ajax на сервер
      3) по результату — сообщить об ошибке или перезагрузить текущую страницу, если авторизация прошла успешно.

      Но почему бы вам не воспользоваться уже готовым плагином вроде — https://ru.wordpress.org/plugins/login-with-ajax/