Đăng nhập chuyển hướng đến trang trước


8

Tôi có một trang đăng nhập tùy chỉnh tại http://netballscoop.com/log-in/

Khi bạn điền tên người dùng và mật khẩu, nó sẽ chuyển hướng bạn đến trang trước mà bạn đang truy cập một cách hoàn hảo. Khi bạn bấm Đăng xuất, nó sẽ chuyển hướng bạn đến cùng một trang. Vì vậy, tất cả điều này hoạt động tốt.

Nếu bạn để trống tên người dùng / mật khẩu hoặc có lỗi, nó sẽ dẫn bạn đến đăng nhập wp. Để ngăn chặn điều này, tôi đã sử dụng mã từ /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;
}

Điều này hoạt động rất tốt để đăng nhập lỗi trên trang web của tôi. Nhưng bây giờ, chuyển hướng đăng nhập sẽ đưa bạn đến http://netballscoop.com/members/testing (Người dùng 'Kiểm tra' được thực hiện trên trang hồ sơ của thành viên BuddyPress của họ).

Làm cách nào để chuyển hướng người dùng đến trang trước khi họ đăng nhập?


Câu trả lời được đăng trước đây của tôi đã đọc sai câu hỏi của bạn một chút vì vậy tôi đã xóa nó, bạn đã thử nhập vào hành động wp_login chưa? Đây là một trong những người cuối cùng bị sa thải khi đăng nhập thành công. Tôi đã sử dụng nó trên một trang web mà tôi đã xây dựng gần đây bằng BuddyPress và nó hoạt động như một cơ duyên.
Eric Allen

Xin chào @allenericr, thành thật mà nói tôi sẽ không biết bắt đầu từ đâu với điều đó. Kiến thức của tôi về php / tests / etc rất hạn chế. Bạn có thể đăng những gì bạn đang sử dụng cho trang web đó nếu bạn thấy nó là một sự thay thế tốt hơn?
Tanya

Câu trả lời:


8

Bạn có thể lọc các login_redirectchức năng như vậy, thích ứng theo nhu cầu của bạn.

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

Cập nhật 1:

Mã (ở trên) đã được sửa đổi ở trên và được thử nghiệm - nó hoạt động.

Cập nhật 2: (bởi Tanya)

Đã chọn với @userabuser và đưa ra câu trả lời này có hiệu quả.

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

Lưu ý quan trọng:

Hóa ra Tanya đã sử dụng plugin diễn đàn bbPress, do đó, mặc dù đoạn trích ban đầu sử dụng,

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

đúng và hoạt động trong điều kiện WordPress "bình thường" , trong trường hợp này được ghi đè ưu tiên bởi bộ lọc bbPress,

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

Bây giờ vì tài liệu trên trang web bbPress.org có chi tiết các hành động và móc nối này được tổ chức kém và có phần chưa hoàn chỉnh (theo như tôi có thể nói), tôi đề nghị rằng (bất cứ ai) tìm kiếm thêm thông tin về những gì móc ở đâunhững gì nên lọc , nên làm gì xem tài nguyên này ở đây cung cấp danh sách chi tiết về móc và bộ lọc.

Ghi chú: (linh tinh)

Thay đổi 'subscriber'để phù hợp với vai trò bạn đang sử dụng cho loại người dùng đó. Nó cũng có thể chấp nhận nhiều vai trò vì nó ở dạng một mảng.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanya Đã chỉnh sửa mã để bao gồm các tham số tùy chọn. $ người dùng có thể không truy cập được. Hãy thử cập nhật này và cho tôi biết.
Adam

@Tanya Hi Tanya, cảm ơn đã cập nhật. Trong khi đó, bạn có thể vui lòng xóa các bình luận cuối cùng của mình (nhấp vào x nhỏ khi di chuột qua) để chúng tôi có thể dọn sạch chuỗi nhận xét. Tôi cũng sẽ xóa những bình luận không liên quan của tôi.
Adam
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.