• Hello everyone!
    In a polylang’s 5-languages website I am using WPS Hide Login plugin and Ligin/Signup Popup plugin. So for login and logout I have to manage correctly behavior in those two scenarios:

    • 1°) I am in my country and I use the website in local language which is browser’s one;
      2°) I am in another country and I use the website in my language selecting anguage by Polylang so that means like :
      pll_current_language() != substr($_SERVER[‘HTTP_ACCEPT_LANGUAGE’], 0, 2);
    • Having WPS Hide Login settled without any redirection fields settled and Success Endpoint deactivated to manage by language I reached to manage logouts correctly between those two scenarios to redirect to homepage with logout_url hook:

      function my_logout_redirect($link) { 
          
          $session_lang = pll_current_language(); 
          $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
      
          if ($session_lang != $browser_lang && ! is_admin() ) {
              $redirect_url = "https://example.com/wpshidelogin/?action=logout&redirect_to=https%3A%2F%2Fexample.com%2F" . $session_lang . "%2F" . "&_wpnonce=" . wp_create_nonce( 'log-out' );
              return $redirect_url;               
          } 
          if ($session_lang == $browser_lang && ! is_admin() ) {
              $redirect_url = "https://example.com/wpshidelogin/?action=logout&redirect_to=https%3A%2F%2Fexample.com%2F" . "&_wpnonce=" . wp_create_nonce( 'log-out' );
              return $redirect_url;
          }
          if (is_admin()) {
              $redirect_url = "https://example.com/wpshidelogin/?action=logout&redirect_to=https%3A%2F%2Fexample.com%2F" . "&_wpnonce=" . wp_create_nonce( 'log-out' );
              return $redirect_url;
          }       
          return $link;   
      }
      add_filter( 'logout_url', 'my_logout_redirect', 10, 3);

      but to manage login, redirecting to homepage once logged, it looks like a bit messing up using this code:

      function my_login_redirect( $redirect_to, $request, $user ) {
      //function my_login_redirect() {
          $session_lang = pll_current_language(); 
          $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
          $redirect_url = "";
              
          if (!is_admin()) {
              $redirect_url = "https://example.com" . ( ($session_lang != $browser_lang ) ? $session_lang : "" ) . "/";
          }
          if (is_admin())
              $redirect_url = admin_url();
      
          /*
          if ($current_language == "it" && $current_language != substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) && current_user_can('administrator') == false) 
              return "https://example.com/it/";
          else 
              return "https://example.com/wp-admin";
          if ($current_language == "en" && $current_language != substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) && current_user_can('administrator') == false) 
              return "https://example.com/en/";
          else    
              return "https://example.com/wp-admin";
          if ($current_language == "es" && $current_language != substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) && current_user_can('administrator') == false) 
              return "https://example.com/es/";
          else
              return "https://example.com/wp-admin";
          if ($current_language == "fr" && $current_language != substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) && current_user_can('administrator') == false)     
              return "https://example.com/fr/";
          else    
              return "https://example.com/wp-admin";
          if ($current_language == "de" && $current_language != substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) && current_user_can('administrator') == false) 
              return "https://example.com/de/";
          else
              return "https://example.com/wp-admin";
          */
          
          //return home_url();
          //wp_safe_redirect($redirect_url);
          //exit;
          return $redirect_url;
      }
      //add_action('wp_login', 'my_login_redirect');
      add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );

      where it always goes to login page (yes, as login page I created a page with [xoo_el_inline_form active=”login”] shortcode since I use Login/Signup Popup plugin for login/logouts…. even if I log in in admin panel it goes to Login page instead of wp-admin…and I got stuck at this point… Any suggests? If needed , I can provide more informations about behavior happens on my website with this login_redirect hook….

      Thanks in advance! Cheers

Viewing 1 replies (of 1 total)
  • Thread Starter Luigino

    (@luigino)

    EDIT:

    Investigating some more using error_log I modified previous login code with:

    function my_login_redirect( $user_login, WP_User $user ) {
            
        $session_lang = pll_current_language(); 
        $browser_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
        
        if (current_user_can('administrator') == false) {
            if ($session_lang != $browser_lang) {
                $redirect_url = "https://example.com/" . $session_lang . "/";
            } else {
                $redirect_url = "https://example.com/";
            }
        } else {
            $redirect_url = admin_url();
        }
        error_log(__METHOD__ . ": value = $redirect_url");
        wp_redirect( $redirect_url );   
        exit;
    }
    add_action('wp_login', 'my_login_redirect', 10, 2);

    and in debug.log I see $redirect_url as https://example.com but it doesn’t redirect to that homepage but it goes to login page itself…. why? I’m really stuck here….

    Thank you in advance!
    Cheers!

    • This reply was modified 2 years, 11 months ago by Luigino.
Viewing 1 replies (of 1 total)
  • The topic ‘WordPress login hooks – how to make login redirect in correct behavior?’ is closed to new replies.