Понравился вопрос? Нужен ответ? Поддержите проект
WPAsk
Ответов: 14
  1. Ashfame

    Вы можете сделать это легко. Вам просто нужно указать параметр перенаправления.

    <?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 );
    ?>
    

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

    1. rafi

      Я получил это, используя двойной слэш. Так что мое решение таково: <?php echo '//' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>

    2. rafi

      Я использую пользовательскую форму, и я использую предоставленное вами решение для скрытых полей, но в моем случае меня перенаправляют на URL вроде 'localhost/wordpress/localhost/wordpress/blog/someone'. Есть еще идеи?

  2. Sisir

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

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

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

  3. Matt

    Хук фильтра login_redirect filter hook здесь является более полным и эффективным решением. Таким образом, вы можете предлагать разные пути перенаправления для разных уровней пользователей или поддерживать 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 );
    
  4. Javier Villanueva

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

    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 );
    

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

    if (isset($_REQUEST['redirect_to'])){
        wp_redirect($_REQUEST['redirect_to']);
        // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit;
        exit;
    
    } else {
        wp_redirect(get_bloginfo('url') . '/groups/');
        exit;
    }
    
    1. Tyler Durden

      В каком файле вы добавили эти функции? Благодарю.

    2. Ian Dunn

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

    3. Javier Villanueva

      В functions.php

  5. Neil

    Не сработал ни один из ваших ответов! Работает вот так:

    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:)

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

    Также я изменил функцию:

    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‘ и добавляю корректный протокол: $protocol://. Также я изменил "".

  6. Chip Bennett

    Попробуйте передать 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;, которое я добавил во второй пример.

    1. Chip Bennett

      Извините, неправильно понял ваш вопрос изначально. Я добавил правку, которая, надеюсь, подойдет.

    2. Javier Villanueva

      Это не то. Мне нужен какой-то способ перехватить исходный URL и перенаправить туда пользователя, как только он войдет в систему.

  7. user90810

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

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

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: