Làm cách nào để hiển thị 'lỗi đăng nhập' và 'mất mật khẩu' trên trang mẫu của tôi?


10

Tôi đang cung cấp thông tin đăng nhập front-end trong một mẫu, sử dụng hàm wp_login_form. Nó xử lý chuyển hướng sau khi đăng nhập và đăng xuất khá gọn gàng! Nhưng nếu tên người dùng / mật khẩu không khớp hoặc không tồn tại, người dùng sẽ được chuyển hướng đến trang đăng nhập của quản trị viên, với lỗi js bị rung. Cũng giống như trường hợp khi tôi đang cố gắng thiết lập lại mật khẩu, nó đưa tôi đến trang phụ trợ tôi, nơi tôi phải nhập email của mình để đặt lại mật khẩu. Tôi muốn hiển thị cả hai hoạt động này trên mẫu của tôi. Có cách nào tôi có thể làm điều này?

Nhờ sự giúp đỡ trước.

Câu trả lời:


9

Vâng nó có thể. Bạn phải tạo ba bộ lọc cho việc này.

Nội dung quản trị viên trong lớp

class WPSE29338_Admin {
    public static function setup() {
        add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
        add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
        add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
    }

    public static function modifyLoginURL($loginUrl, $redirect = '') {
        $loginUrl = site_url('login'); // Link to login URL

        if(!empty($redirect)) {
            $loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
        }

        return $loginUrl;
    }

    public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
        $lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL

        if(!empty($redirect)) {
            $lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
        }

        return $lostpwUrl;
    }

    public static function modifyRegisterURL($registerUrl) {
        if(!is_user_logged_in()) {
            if (get_option('users_can_register')) {
                $registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
            } else {
                $registerUrl = '';
            }
        }

        return $registerUrl;
    }
}

Đầu tiên chúng ta cần lọc đầu ra của hàm wp_login_url()được sử dụng wp_login_form()trong actionthuộc tính Forms.

Nhìn vào phương pháp modifyLoginUrl(). Ở đây chúng tôi lưu trữ URL của trang loginbên trong biến $loginUrl. Trang này phải tồn tại bên trong WordPress, vì vậy hãy tạo nó trước.

Tiếp theo chúng ta cần một bộ lọc cho hàm wp_lostpassword_url()wp_register(). Về cơ bản là giống nhau. URL của trang web được lưu trữ bên trong biến $lostpwUrl$registerUrl.

Cuối cùng nhưng không kém phần quan trọng, bạn phải gọi lớp trên móc hành động đúng. Đối với các chủ đề này nên after_setup_themevà cho các plugin bạn có thể sử dụng plugins_loaded.

Chủ đề / chức năng.php

add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

bổ sung

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

Tôi rất tiếc phải làm điều này, nhưng tôi rất thích làm điều này, nhưng tôi dường như không thể tìm ra nó! Trong mã bạn cung cấp, tôi nên thay đổi cái gì?
Bram Vanroy

Bram, nếu bạn đang tạo một chủ đề tùy chỉnh, sau đó đặt tất cả các khối mã thứ nhất và thứ hai vào tệp chức năng chủ đề của bạn. Nếu bạn đang tạo một plugin, hãy đặt khối mã đầu tiên và thứ ba vào tệp plugin của bạn. Có vẻ như điều duy nhất bạn có thể phải sửa đổi là dòng thứ 9 của lớp, nơi nó nói $loginUrl = site_url('login'); // Link to login URL. Chỉ cần thay đổi 'đăng nhập' để khớp với sên của trang đăng nhập bạn muốn sử dụng. Trừ khi Rofflox mắc lỗi cú pháp mà tôi không thấy, điều này có vẻ như nó hoạt động rất đẹp.
Jen

@guiniveretoo Cảm ơn bạn đã trả lời! Vấn đề là tôi làm việc với một hình thức thả xuống có thể được truy cập từ bất kỳ trang nào trên trang web. Vì vậy, không có sên xác định nào có thể, bởi vì mọi người có thể đăng nhập từ bất kỳ trang nào ... Vậy, tôi nên đặt gì ở đó?
Bram Vanroy

1
Bram - Wordpress cần một url đăng nhập để nếu có một số lỗi người dùng hoặc tương tự, có nơi nào đó để họ đi và đặt lại mật khẩu hoặc đăng ký tài khoản. Đặt url đăng nhập cung cấp trang đó. Tôi đã thực hiện chính xác thiết lập này với một dự án vào năm ngoái: một hộp đăng nhập javascript xuất hiện cùng với hình thức đăng nhập - nếu họ nhập thông tin của họ một cách chính xác, nó sẽ gửi chúng đến wp-admin; nếu không, họ kết thúc trên trang đăng nhập tùy chỉnh để thử lại hoặc đặt lại mật khẩu.
Jen
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.