Intereting Posts
Можно ли загружать wp-контент / закачки с другого сервера? Нет результатов поиска пользовательского типа сообщения в панели администратора Проблема после обновления до 3.6.1 Редактирование пользовательской HTML-страницы из панели управления WP admin Редактирование программы Backend Uploader Выпускает ли плагин под AGPL, чтобы люди открывали исходную версию всей своей установки WordPress? Загрузка комментариев к сообщению после нажатия кнопки Thumb рейтинг для wordpress – топ-пользователь настраиваемая страница – не отображать панель инструментов сверху Показывать только последние липкие сообщения, отображать другие сообщения в хронологическом порядке Отправка электронной почты с помощью функции на странице или правильное действие на другой странице проверить, существует ли тег в базе данных wp Создать страницу с помощью специального скрипта php и извлеченных данных javascript и css ссылки не работают на сервере Проверьте шаблон страницы на кнопке save_post.

Перенаправить пользователя на исходный URL после входа?

У меня есть функция, которая перенаправляет пользователей на страницу входа (home), если они пытаются получить доступ к любой другой странице без входа в систему, вот как это работает:

function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

На самом деле это просто и прекрасно работает, проблема в том, что мне нужно перенаправить их на URL-адрес, который они пытались выполнить после успешного входа в систему, точно так же, как работает бэкэнд WordPress.

Есть ли способ сделать это? Заранее спасибо!

Solutions Collecting From Web of "Перенаправить пользователя на исходный URL после входа?"

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

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

Если вы используете пользовательскую форму на главной странице, то внутри <form> убедитесь, что вы заполняете скрытое поле URL-адресом для перенаправления

 <input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" /> 

И если вы используете wp_login_form() чтобы сгенерировать форму, затем заполните параметр – http://codex.wordpress.org/Function_Reference/wp_login_form

 <?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( 'Username' ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => true, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args ); ?> 

Измените другие параметры в соответствии с тем, что у вас есть или вам нужно.

Попробуйте передать the_permalink() в качестве аргумента $redirect :

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( the_permalink() ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

РЕДАКТИРОВАТЬ:

Извините, неправильно понял ваш вопрос. Попробуй это:

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] ); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Обратите также внимание: правильное использование wp_redirect() обычно требует добавления exit; , который я добавил к моему второму примеру.

Спасибо всем, я вроде немного использовал то, что все рекомендовали, в конце концов, мой код выглядит так:

 function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

И в моей форме входа (я жестко кодирую мою регистрационную форму в своем приложении, спасибо @Ashfame за то, что дал мне знать о wp_login_form. Я понятия не имел, что она существует). Я добавил это, когда пользовательские учетные данные в порядке, и они готовы войти в систему:

 if (isset($_REQUEST['redirect_to'])){ wp_redirect($_REQUEST['redirect_to']); } else { wp_redirect(get_bloginfo('url') . '/groups/'); } 

Большое спасибо за вашу помощь, я проголосовал за всех!

это мой код, который я использую для перехода на страницу входа в wp. Затем, когда они вошли в систему, они вернулись обратно туда, где они были. Но это не домашняя страница, а страница входа в WordPress, где я настраиваю пользовательский логин.

 <?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?> 

Вы можете научиться. Как правило, вы получите текущий URL-адрес пользователя через $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]

login_redirect фильтра login_redirect является более полным и эффективным решением. Таким образом, вы можете предлагать разные пути перенаправления для разных уровней пользователей или поддерживать URL-адрес переадресации в случае ошибки при входе в систему (т.е. неверный пароль).

 function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Он не работал ни на один из ваших ответов, но только добавлял немного, это сработало! Вот мой код:

 function login_redirect( $redirect_to, $request, $user ){ if(isset($_REQUEST['redirect_to'])){ return $_REQUEST['redirect_to']; } return admin_url(); } add_filter( 'login_redirect', 'login_redirect', 10, 3 ); function restrict_access_if_logged_out(){ if (!is_user_logged_in() && !is_home()){ $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"])); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Только я добавил /wp-login.php по сравнению с ответом @ Matt, но для меня это был ключ. Надеюсь, это поможет! 🙂

**РЕДАКТИРОВАТЬ:

Я обнаружил ОШИБКУ, когда вы нажимаете FORCE, чтобы начать в HTTPS. Этот метод не работает, поскольку перенаправление выполняется в HTTP. Для исправления проблемы я изменил функцию. Это результат:

 function restrict_access_if_logged_out(){ global $wp; $protocol='http'; if (isset($_SERVER['HTTPS'])) if (strtoupper($_SERVER['HTTPS'])=='ON') $protocol='https'; if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){ $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]); wp_redirect( $redirect ); exit; } } add_action( 'wp', 'restrict_access_if_logged_out', 3 ); 

Я проверяю протокол, а затем esc_url ' esc_url ' и добавляю правильный протокол: $protocol:// . Также я изменил "" .

Я основывался на этой странице .

Я знаю, что это очень поздно, но я сделал сообщение о том, как это сделать, если любые будущие люди найдут это и нуждаются в нем:

http://www.ryanprejean.com/force-login-with-redirect-and-exceptions/