템플릿 페이지에 '로그인 오류'와 '비밀번호 분실'을 표시하는 방법은 무엇입니까?


10

wp_login_form 함수를 사용하여 템플릿에 프런트 엔드 로그인을 제공하고 있습니다. 로그인 및 로그 아웃 후 리디렉션을 매우 깔끔하게 처리합니다! 그러나 사용자 이름 / 비밀번호가 일치하지 않거나 존재하지 않으면 사용자는 흔들리는 js 오류와 함께 관리자 로그인 페이지로 리디렉션됩니다. 암호를 재설정하려고 할 때도 마찬가지입니다. 암호를 재설정하기 위해 전자 메일을 입력 해야하는 백엔드 페이지로 이동합니다. 템플릿에이 두 가지 활동을 모두 보여주고 싶습니다. 내가 할 수있는 방법이 있습니까?

도움을 주셔서 감사합니다.

답변:


9

네 가능합니다. 이를 위해 세 개의 필터를 만들어야합니다.

수업 내부의 관리 자료

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

먼저 forms 속성 에서 wp_login_url()사용되는 함수의 출력을 필터링해야 합니다.wp_login_form()action

방법을보십시오 modifyLoginUrl(). 여기서 login변수의 내부에 페이지의 URL을 저장합니다 $loginUrl. 이 페이지는 WordPress 내에 존재해야하므로 먼저 작성하십시오.

다음으로 우리는 함수에 대한 필터 필요 wp_lostpassword_url()wp_register(). 기본적으로 동일합니다. 사이트의 URL 변수 내부에 저장 $lostpwUrl하고 $registerUrl.

마지막으로 올바른 작업 후크에서 클래스를 호출해야합니다. 테마 after_setup_theme및 플러그인의 경우 사용할 수 있습니다 plugins_loaded.

테마 / 함수 .php

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

플러그인

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

죄송 합니다만,이 작업을하고 싶지만 알아낼 수 없습니다! 제공 한 코드에서 나에 의해 무엇을 변경해야합니까?
Bram Vanroy

Bram, 사용자 정의 테마를 작성하는 경우 첫 번째 및 두 번째 코드 블록을 테마 기능 파일에 모두 넣으십시오. 플러그인을 작성하는 경우 플러그인 파일에 첫 번째 및 세 번째 코드 블록을 넣으십시오. 수정해야 할 유일한 것은 클래스의 9 번째 줄입니다 $loginUrl = site_url('login'); // Link to login URL. 사용하려는 로그인 페이지의 슬러그와 일치하도록 '로그인'을 변경하십시오. Rofflox가 보이지 않는 구문 오류를 만들지 않았다면, 이것은 아름답게 작동하는 것처럼 보입니다.
Jen

@guiniveretoo 답장을 보내 주셔서 감사합니다! 문제는 웹 사이트의 모든 페이지에서 액세스 할 수있는 드롭 다운 양식으로 작업한다는 것입니다. 그래서 사람들은 어떤 페이지에서든 로그인 할 수 있기 때문에 명확한 슬러그가 없습니다 ... 그래서 거기에 무엇을 넣어야합니까?
Bram Vanroy

1
Bram-Wordpress에는 로그인 URL이 필요하므로 사용자 오류가 있거나 이와 유사한 경우 암호를 재설정하거나 계정을 등록 할 수있는 곳이 있습니다. 로그인 URL을 설정하면 해당 페이지가 제공됩니다. 작년에 프로젝트 에서이 설정을 정확하게 수행했습니다. 로그인 양식과 함께 표시된 자바 스크립트 로그인 상자-정보를 올바르게 입력하면 wp-admin으로 보냅니다. 그렇지 않은 경우 사용자 정의 로그인 페이지에서 결국 다시 시도하거나 비밀번호를 재설정합니다.
Jen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.