Редирект после авторизации в 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), в котором разработчик собирает уникальные дополнения и исправления к движку. Вот именно в такой модуль можно добавить код небольшого фильтра, выполняющего редирект после авторизации пользователя на нужную страницу. Собственно сам код.
Скрываем wp-admin, wp-login и делаем редирект ссылки
Всем привет! Вот приспичило мне скрыть странички wp-admin и wp-login, но есть одна проблемка, о ней и поговорим!
Для тех кто не знает и желает так же скрыть wp-admin и wp-login, выложу код, который необходимо будет добавить в конце файла functions.php:
/*wp-admin, ошибка 404*/ add_action( 'init', 'blockusers_init' ); function blockusers_init() < if ( is_admin() && ! current_user_can( 'administrator' ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) < wp_redirect( '404' ); exit; >> /*wp-login.php, ошибка 404*/ function redirect_login_page() < $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?pass=1" ) < wp_redirect( '404' ); exit; >> add_action('init','redirect_login_page');
теперь при желании пользователя посетить данные страницы, будет высвечиваться сообщение, что данной страницы нет! Не уверен, правильно ли я сделал, но результат свой дает!
Возникает другая проблема, если у вас отключены комментарии, то для неавторизованных пользователей появляется ссылка с предложением авторизоваться:
и естественно если мы на нее нажимаем, то у нас появится сообщение о том, что данной страницы нет.
Есть вариант, изменить немного ранее добавленный код на следующий:
/*wp-admin, ошибка 404*/ add_action( 'init', 'blockusers_init' ); function blockusers_init() < if ( is_admin() && ! current_user_can( 'administrator' ) && ! ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) < wp_redirect( '404' ); exit; >> /*редирект с wp-login.php, на главную с окном авторизации*/ function redirect_login_page() < $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?pass=1" ) < wp_redirect( home_url('/?action-rcl=login') ); exit; >> add_action('init','redirect_login_page');
в данном случае у нас нет страницы wp-admin и есть редирект с wp-login на главную с открывающимся окном авторизации нашего плагина Wp-Recall. Окно мы получили с помощью данной вставки
, подробнее можете почитать ТУТ в разделе «Шорткоды для формы регистрации и входа».
Естественно, при наведении мышки на ссылку авторизации, внизу браузера высветится то, что вы должны перейти на страницу wp-login, но я не думаю, что на это особо обращают внимание!
Есть несколько вопросов, на которые я не знаю ответа и надеюсь, что знающие смогут ответить на них в комментариях:
Возможно ли скрыть отображаемую ссылку на страницу wp-login, при наведении на ссылку «авторизоваться»?
Как сделать, что бы не совершался редирект на главную при клике на ссылку «авторизоваться» («get_permalink» не работает)?
Или как сделать, что бы при нажатии на ссылку «авторизоваться» открывалось окно авторизации Wp-Recall?
На этом все, всем спасибо за внимание и удачи в продвижении ваших проектов!
добавлено 10.11.15.
Благодаря совету пользователя»Otshelnik-Fm» и почитав вот эту ветку форума: /forum/faqs/vsplyvayushhaya-forma/ , нашел ответы на поставленные выше вопросы!
У меня на самом деле выводились комментарии по стандартному шаблону WordPress с помощью функции
Нам необходимо в файле comments.php, вашей темы, удалить функцию вывода данного шаблона и написать/вставить вместо него код этого самого шаблона
apply_filters( 'comment_form_default_fields', $fields ), 'comment_field' => '', 'must_log_in' => '
' . sprintf( __( 'You must be logged in to post a comment.' ), wp_login_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '
', 'logged_in_as' => '' . sprintf( __( 'Logged in as %2$s. Log out?' ), admin_url( 'profile.php' ), $user_identity, wp_logout_url( apply_filters( 'the_permalink', get_permalink( $post_id ) ) ) ) . '
', 'comment_notes_before' => '' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '
', 'comment_notes_after' => '' . sprintf( __( 'You may use these HTML tags and attributes: %s' ), '
', 'id_form' => 'commentform', 'id_submit' => 'submit', 'title_reply' => __( 'Leave a Reply' ), 'title_reply_to' => __( 'Leave a Reply to %s' ), 'cancel_reply_link' => __( 'Cancel reply' ), 'label_submit' => __( 'Post Comment' ), 'class_submit' => 'submit', // Строка. С 4.1. class атрибут для submit элемента. 'submit_button' => '', // формат кнопки submit. C 4.2. 'submit_field' => '' . allowed_tags() . '
' ) . '%1$s %2$s', // формат кнопки submit %1$s - кнопка %2$s - скрытые поля. C 4.2. ); comment_form( $args ); ?>
далее правим в нем аргумент
apply_filters( 'comment_form_default_fields', $fields ), 'comment_field' => '', 'must_log_in' => '
Для отправки комментария вам необходимо авторизоваться или зарегистрироваться на сайте.
', 'logged_in_as' => 'Вы авторизованы на сайте как '.get_user_meta( get_current_user_id() ,nickname, true).', хотите выйти с сайта?
', 'comment_notes_before' => '' . __( 'Your email address will not be published.' ) . ( $req ? $required_text : '' ) . '
', 'id_form' => 'commentform', 'id_submit' => 'submit', 'title_reply' => __( 'Leave a Reply' ), 'title_reply_to' => __( 'Leave a Reply to %s' ), 'cancel_reply_link' => __( 'Cancel reply' ), 'label_submit' => __( 'Post Comment' ), 'class_submit' => 'submit', // Строка. С 4.1. class атрибут для submit элемента. 'submit_button' => '', // формат кнопки submit. C 4.2. 'submit_field' => '%1$s %2$s', // формат кнопки submit %1$s - кнопка %2$s - скрытые поля. C 4.2. ); comment_form( $args ); ?>
как данный код выглядит в работе, опять же можете посмотреть на моем сайте http://web-blog.su/.
И не забудьте поправить свой functions.php, а именно скрыть wp-login
/*wp-login.php, ошибка 404*/ function redirect_login_page() < $page_viewed = basename($_SERVER['REQUEST_URI']); if( $page_viewed == "wp-login.php?pass=1" ) < wp_redirect( '404' ); exit; >> add_action('init','redirect_login_page');
На этом все! Еще раз спасибо отшельнику и всем удачи и терпения!
Редирект с wp-login.php и wp-admin.php.
После того как я установил и настроил вордпресс, конечно позаботился и о защите. В статье — защита вордпресс, я постарался подробно описать все шаги. Если Вы хотите обезопасится, то стоит конечно почитать её и не только прочитать, а и воспользоватся советами.
Да, там есть код который позволяет сделать редирект с wp-admin, отлично, правда существует еще одна страница wp-login.php, через которую происходит вход. Так вот, установив редирект с wp-admin.php на главную и изменил имя wp-login.php на своё очень было спокойно, пока в Яндекс.Вебмастер не увидел — редирект с wp login на страницу входа которую я переименовал.
Печалька. Давай по новой бороздить Интернет и искать решение проблемы.
Делаем редирект с wp-login.php и wp-admin.php
Ищем functions.php активной темы и после «» тегом вставляем:
// редирект с wp-login.php define('ADMIN_URL', '111.php'); add_action('init', 'redirect_login_page'); add_filter('login_url', 'new_wp_login_url', 10, 3); add_filter('logout_url', 'new_wp_logout_url', 10, 2); add_filter('lostpassword_url', 'new_wp_lostpassword_url', 10, 2); function redirect_login_page() < $page_viewed = $_SERVER['REQUEST_URI']; if (strpos($page_viewed, "wp-login.php") !== false || (is_admin() && !(current_user_can('administrator') || current_user_can('super admin')) && !(defined('DOING_AJAX') && DOING_AJAX)) ) < global $wp_query; $wp_query->set_404(); status_header(404); get_template_part('404'); exit; > > function new_wp_login_url($redirect = '', $force_reauth = false) < $login_url = site_url(ADMIN_URL, 'login'); if (!empty($redirect)) $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url); if ($force_reauth) $login_url = add_query_arg('reauth', '1', $login_url); return $login_url; >function new_wp_logout_url() < $args = array( 'action' =>'logout' ); $logout_url = add_query_arg($args, site_url(ADMIN_URL, 'login')); $logout_url = wp_nonce_url( $logout_url, 'log-out' ); return $logout_url; > function new_wp_lostpassword_url() < $args = array( 'action' =>'lostpassword' ); $lostpassword_url = add_query_arg( $args, network_site_url(ADMIN_URL, 'login') ); return $lostpassword_url; > // конец редиректа wp-login.php
в строчке — define(‘ADMIN_URL’, ‘111.php’), страницу 111.php замените на страницу входа в админку, это нужно для того чтоб после нажатия на кнопку выхода Вас перебрасывало на страницу входа.
Теперь при наборе http://Ваш сайт/wp-login.php или http://Ваш сайт/wp-admin.php будет сообщение — Страница не найдена.
Поздравляю — еще один шаг вперёд в безопастность.
Надеюсь материал был достоен внимания.
До новых встреч на моем блоге.
Редирект с wp-login.php и wp-admin.php.
После того как я установил и настроил вордпресс, конечно позаботился и о защите. В статье — защита вордпресс, я постарался подробно описать все шаги. Если Вы хотите обезопасится, то стоит конечно почитать её и не только прочитать, а и воспользоватся советами.
Да, там есть код который позволяет сделать редирект с wp-admin, отлично, правда существует еще одна страница wp-login.php, через которую происходит вход. Так вот, установив редирект с wp-admin.php на главную и изменил имя wp-login.php на своё очень было спокойно, пока в Яндекс.Вебмастер не увидел — редирект с wp login на страницу входа которую я переименовал.
Печалька. Давай по новой бороздить Интернет и искать решение проблемы.
Делаем редирект с wp-login.php и wp-admin.php
Ищем functions.php активной темы и после «» тегом вставляем:
// редирект с wp-login.php define('ADMIN_URL', '111.php'); add_action('init', 'redirect_login_page'); add_filter('login_url', 'new_wp_login_url', 10, 3); add_filter('logout_url', 'new_wp_logout_url', 10, 2); add_filter('lostpassword_url', 'new_wp_lostpassword_url', 10, 2); function redirect_login_page() < $page_viewed = $_SERVER['REQUEST_URI']; if (strpos($page_viewed, "wp-login.php") !== false || (is_admin() && !(current_user_can('administrator') || current_user_can('super admin')) && !(defined('DOING_AJAX') && DOING_AJAX)) ) < global $wp_query; $wp_query->set_404(); status_header(404); get_template_part('404'); exit; > > function new_wp_login_url($redirect = '', $force_reauth = false) < $login_url = site_url(ADMIN_URL, 'login'); if (!empty($redirect)) $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url); if ($force_reauth) $login_url = add_query_arg('reauth', '1', $login_url); return $login_url; >function new_wp_logout_url() < $args = array( 'action' =>'logout' ); $logout_url = add_query_arg($args, site_url(ADMIN_URL, 'login')); $logout_url = wp_nonce_url( $logout_url, 'log-out' ); return $logout_url; > function new_wp_lostpassword_url() < $args = array( 'action' =>'lostpassword' ); $lostpassword_url = add_query_arg( $args, network_site_url(ADMIN_URL, 'login') ); return $lostpassword_url; > // конец редиректа wp-login.php
в строчке — define(‘ADMIN_URL’, ‘111.php’), страницу 111.php замените на страницу входа в админку, это нужно для того чтоб после нажатия на кнопку выхода Вас перебрасывало на страницу входа.
Теперь при наборе http://Ваш сайт/wp-login.php или http://Ваш сайт/wp-admin.php будет сообщение — Страница не найдена.
Поздравляю — еще один шаг вперёд в безопастность.
Надеюсь материал был достоен внимания.
До новых встреч на моем блоге.