Login redirect ke halaman sebelumnya

8

Saya memiliki halaman login khusus di http://netballscoop.com/log-in/

Ketika Anda mengisi nama pengguna dan kata sandi, itu akan mengarahkan Anda ke halaman sebelumnya yang Anda kunjungi dengan sempurna. Ketika Anda mengklik Keluar, itu mengarahkan Anda ke halaman yang sama. Jadi ini semua bekerja dengan baik.

Jika Anda membiarkan nama pengguna / kata sandi kosong atau memiliki kesalahan, itu akan mengarahkan Anda ke login-wp. Untuk mencegah hal ini, saya telah menggunakan kode dari /programming/11477107/redirect-away-from-login-page

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

Ini berfungsi baik untuk kesalahan masuk di situs web saya. Tetapi sekarang pengalihan login membawa Anda ke http://netballscoop.com/members/testing (Pengguna 'Pengujian' diambil untuk halaman profil anggota BuddyPress mereka).

Bagaimana cara mengarahkan pengguna ke halaman sebelumnya ketika mereka login?

Tanya
sumber
Jawaban saya yang sebelumnya diposting sedikit salah membaca pertanyaan Anda, jadi saya menghapusnya, sudahkah Anda mencoba mengaitkannya dengan tindakan wp_login ? Ini adalah salah satu yang terakhir dipecat saat masuk dengan sukses. Saya menggunakannya di situs yang baru-baru ini saya buat menggunakan BuddyPress dan itu berfungsi seperti pesona.
Eric Allen
Hai @ allenericr, sejujurnya saya tidak tahu harus mulai dari mana. Pengetahuan saya tentang php / functions / etc sangat terbatas. Apakah Anda dapat memposting apa yang Anda gunakan untuk situs itu jika Anda menemukan itu adalah alternatif yang lebih baik?
Tanya

Jawaban:

8

Anda dapat memfilter login_redirectfungsi seperti itu, beradaptasi sesuai dengan kebutuhan Anda.

add_filter('login_redirect', 'redirect_previous_page', 10, 1);

function redirect_previous_page( $redirect_to ){
    global $user;

    $request = $_SERVER["HTTP_REFERER"];

    if ( in_array( $user->roles[0], array( 'administrator') ) ) {

        return admin_url();

    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {

        return $request;
    } 

    return $redirect_to;
}

Pembaruan 1:

Kode (di atas) telah dimodifikasi di atas dan diuji - berfungsi.

Pembaruan 2: (oleh Tanya)

Bercakap-cakap dengan @userabuser dan muncul dengan jawaban ini yang berfungsi.

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

Catatan penting:

Ternyata Tanya menggunakan plugin bbPress forum, oleh karena itu terlepas dari cuplikan asli yang menggunakan,

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

yang benar dan berfungsi di bawah kondisi WordPress "normal" , dalam hal ini ditimpa dalam prioritas oleh filter bbPress,

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

Sekarang karena dokumentasi di situs web bbPress.org yang merinci tindakan dan kait ini tidak terorganisir dengan baik dan agak tidak lengkap (sejauh yang saya tahu), saya menyarankan agar (siapa saja) mencari informasi lebih lanjut tentang kait mana dan di mana filter apa yang harus diambil lihat sumber daya ini di sini yang menyediakan daftar kait dan filter terperinci.

Catatan: (bermacam-macam)

Ubah 'subscriber'untuk mencocokkan peran yang Anda gunakan untuk tipe pengguna itu. Itu juga dapat menerima beberapa peran karena itu dalam bentuk array.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
Adam
sumber
@Tanya Diedit kode untuk memasukkan parameter opsional. $ user mungkin tidak dapat diakses. Coba pembaruan ini dan beri tahu saya.
Adam
@Tanya Hai Tanya, terima kasih atas pembaruannya. Sementara itu, bisakah Anda menghapus komentar terakhir Anda (klik x kecil pada hover) sehingga kami dapat membersihkan utas komentar. Saya juga akan menghapus komentar saya yang tidak relevan.
Adam