Giriş yaptıktan sonra kullanıcı orijinal URL'ye yönlendirilsin mi?


16

Oturum açmadan başka bir sayfaya erişmeye çalışıyorlarsa kullanıcıları giriş sayfasına (ana sayfa) yönlendiren bir işlevim var, işte nasıl çalışıyor:

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

Gerçekten basit ve iyi çalışıyor, sorun şu ki, WordPress arka uç çalışmaları gibi, başarılı bir şekilde giriş yaptıktan sonra gitmeye çalıştıkları url'ye yönlendirmem gerekiyor.

Bunu yapmanın bir yolu var mı? Şimdiden teşekkürler!

Yanıtlar:


16

Bunu kolayca yapabilirsiniz. Sadece bir yönlendirme parametresi belirtmeniz gerekir. Giriş sayfasına gitmek için ana sayfada bir giriş bağlantısı kullanıyorsanız, @ sisir'in çözümü doğrudur.

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

Ön sayfada özel bir form kullanıyorsanız, içinde, <form>yeniden yönlendirmek için gizli bir alanı URL ile doldurduğunuzdan emin olun.

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

wp_login_form()Formu oluşturmak için kullanıyorsanız , bir parametre doldurun - 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 );
?>

Diğer parametreleri sahip olduğunuz veya ihtiyaç duyduğunuz şekilde değiştirin.


özel form kullanıyorum ve sağlanan gizli alan çözümü kullanıyorum, ama benim durumumda bu 'localhost / wordpress / localhost / wordpress / blog / birisi' gibi url'e yönlendiriliyor. herhangi bir yardım?
rafi

Bunu aldım, çift eğik çizgi kullanıyorum. benim çözümüm böyle <? php echo '//'. $ _SERVER ["HTTP_HOST"]. $ _SERVER [ "REQUEST_URI"]; ?>
rafi

6

Tartışma the_permalink()olarak geçmeyi deneyin $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 );

DÜZENLE:

Üzgünüz, sorunuzu başlangıçta yanlış anladınız. Bunu dene:

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

Ayrıca not: wp_redirect()genellikle doğru kullanımı exit;ikinci örneğime eklediğim eklemeyi gerektirir .


Bu hiç mantıklı değil, yönlendirmenin eve gitmesi gerekiyor, iyi çalışıyor Orijinal URL'yi yakalamak ve giriş yaptıktan sonra kullanıcıyı oraya yönlendirmek için bir yola ihtiyacım var.
Javier Villanueva

Üzgünüz, sorunuzu başlangıçta yanlış anladınız. Kullanım durumunuza hitap eden bir düzenleme ekledim.
Chip Bennett

4

Hepinize teşekkürler, ben tür herkesin tavsiye böylece biraz sonunda kullanılan benim kod şöyle görünür:

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

Ve benim giriş formunda (benim aplikasyon benim giriş formu hardcoding ben wp_login_form hakkında bana bildirmek için teşekkür @Ashfame var Ben hiçbir fikrim yoktu) Kullanıcı kimlik bilgileri iyi ve giriş hazır olduklarında bunu ekledi:

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

Yardımın için çok teşekkürler, herkese oy verdim!


Merhaba Javier, hangi işlevleri bu dosyaya eklediniz? Teşekkürler.
Tyler Durden

İçindefunctions.php
Javier Villanueva

4
Aramalı exit()ya da die()sonra wp_redirect(). Aksi takdirde wp_redirect(), hataların ve güvenlik açıklarına yol açabilecek sonradan kodun yürütülmesi mümkündür .
Ian Dunn

2

Bu benim wp giriş sayfasına yönlendirmek için insanlar benim kodum. Sonra giriş yaptıkları zaman bulundukları yere geri döndüler. Ama ana sayfa değil, özel giriş ayarladığım wordpress giriş sayfası.

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

Araştırmak isteyebilirsiniz. Genellikle bir kullanıcının geçerli URL'sini şu şekilde alırsınız:$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]


0

login_redirectFiltre kanca burada daha kapsamlı ve etkili bir çözümdür. Bu şekilde, farklı kullanıcı düzeyleri için farklı yönlendirme yolları sunabilir veya oturum açarken bir hata olması durumunda yönlendirme URL'sini koruyabilirsiniz (örn. Yanlış Şifre).

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

Cevaplarınızdan hiçbirini işe yaramadı, sadece küçük bir şey ekledi, işe yaradı! İşte benim kod:

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'in cevabına kıyasla sadece ben ekledim , ama benim için anahtar oldu. Umarım yardımcı olur! :)

**DÜZENLE:

HTTPS'ye geçmek için FORCE wordpress olduğunuzda bir HATA tespit ettim. Yeniden yönlendirme HTTP'de olduğundan bu yöntem çalışmaz. Sorunu çözmek için işlevi değiştirdim. Sonuç budur:

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

Ben protokolü kontrol edin ve sonra ben 'silindi esc_url' ve doğru protokolü ekledi: $protocol://. Ayrıca değiştirdim "".

Bu sayfaya dayanıyorum .


0

Bunun çok geç olduğunu biliyorum, ancak gelecekteki insanlar bunu bulup ihtiyaç duyarsa tam olarak nasıl yapılacağı hakkında bir yazı yaptım:

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


Bu bağlantı soruyu cevaplayabilirken, cevabın önemli kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir. Bkz. Nasıl Cevap Verilir .
Gabriel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.