it-swarm.com.de

Benutzer nach der Anmeldung zur ursprünglichen URL umleiten?

Ich habe eine Funktion, die Benutzer auf die Anmeldeseite (Startseite) umleitet, wenn sie versuchen, auf eine andere Seite zuzugreifen, ohne angemeldet zu sein:

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

Das Problem ist, dass ich sie nach der erfolgreichen Anmeldung zu der URL umleiten muss, zu der sie wollten, genau wie das WordPress-Backend funktioniert.

Gibt es eine Möglichkeit, dies zu tun? Danke im Voraus!

15

Vielen Dank, ich habe ein bisschen von dem verwendet, was alle empfohlen haben, so dass mein Code am Ende so aussieht:

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

Und in meinem Anmeldeformular (ich habe mein Anmeldeformular in meiner Bewerbung fest codiert, danke @Ashfame, dass ich über wp_login_form informiert wurde. Ich hatte keine Ahnung, dass es existiert) habe ich Folgendes hinzugefügt, wenn die Benutzeranmeldeinformationen in Ordnung sind und sie zum Anmelden bereit sind:

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

Vielen Dank für Ihre Hilfe, ich habe alle gewählt!

4

Das geht ganz einfach. Sie müssen nur einen Umleitungsparameter angeben. Wenn Sie einen Anmeldelink auf der Startseite verwenden, um zur Anmeldeseite zu gelangen, ist die Lösung von @ sisir korrekt.

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

Wenn Sie ein benutzerdefiniertes Formular auf der Startseite verwenden, stellen Sie sicher, dass Sie in dem <form> ein verstecktes Feld mit der URL ausfüllen, die umgeleitet werden soll

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

Und wenn Sie wp_login_form() zum Generieren des Formulars verwenden, geben Sie einen Parameter ein - 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 );
?>

Ändern Sie andere Parameter je nach Bedarf.

15
Ashfame

Versuchen Sie, the_permalink() als $redirect-Argument zu übergeben:

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

BEARBEITEN:

Sorry, habe deine Frage ursprünglich falsch verstanden. Versuche dies:

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

Beachten Sie auch: Die ordnungsgemäße Verwendung von wp_redirect() erfordert im Allgemeinen das Hinzufügen von exit;, den ich meinem zweiten Beispiel hinzugefügt habe.

6
Chip Bennett

dies ist mein Code, den ich benutze, um Leute zu wp Login-Seite zu leiten. Wenn sie dann eingeloggt waren, kehrten sie dorthin zurück, wo sie waren. Aber es ist nicht die Startseite, sondern die WordPress-Anmeldeseite, auf der ich die benutzerdefinierte Anmeldung einrichte.

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

Vielleicht möchten Sie mit recherchieren. Normalerweise erhalten Sie die aktuelle URL eines Benutzers über $_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"].

2
Sisir

Es hat bei keiner Ihrer Antworten geklappt, aber es hat nur ein bisschen geklappt! Hier mein Code:

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

Nur ich habe /wp-login.php im Vergleich zu @ Matts Antwort hinzugefügt, aber für mich war es der Schlüssel. Hoffentlich hilft das! :)

**BEARBEITEN:

Ich habe einen FEHLER festgestellt, als Sie mit FORCE WordPress in HTTPS navigieren. Diese Methode funktioniert nicht, da die Umleitung in HTTP erfolgt. Zur Behebung des Problems habe ich die Funktion geändert. Das ist das Ergebnis:

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

Ich überprüfe das Protokoll und habe dann 'esc_url' gelöscht und das richtige Protokoll hinzugefügt: $protocol://. Auch ich habe den "" geändert.

Ich arbeite mit dieser Seite .

0
Neil

Ich weiß, dass dies sehr spät ist, aber ich habe einen Post darüber verfasst, wie dies genau zu tun ist, wenn zukünftige Leute dies finden und es brauchen:

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

0
user90810

Der login_redirect filter hook ist hier eine vollständigere und effektivere Lösung. Auf diese Weise können Sie verschiedene Weiterleitungspfade für verschiedene Benutzerebenen anbieten oder die Weiterleitungs-URL beibehalten, falls beim Anmelden ein Fehler auftritt (d. H. Falsches Kennwort).

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