จะแสดง 'ข้อผิดพลาดในการเข้าสู่ระบบ' และ 'รหัสผ่านที่หายไป' ในหน้าเทมเพลตของฉันได้อย่างไร


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

ก่อนอื่นเราต้องกรองเอาท์พุทของฟังก์ชั่นwp_login_url()ที่ใช้โดยwp_login_form()ในactionแอตทริบิวต์แบบฟอร์ม

modifyLoginUrl()ดูวิธีการ ที่นี่เราเก็บ URL ของหน้าภายในตัวแปรlogin $loginUrlหน้านี้จะต้องมีอยู่ภายใน WordPress ดังนั้นสร้างมันขึ้นมาก่อน

ต่อไปเราต้องกรองสำหรับฟังก์ชั่นและwp_lostpassword_url() wp_register()มันเป็นพื้นเดียวกัน URL ของเว็บไซต์ที่มีการเก็บไว้ในตัวแปรและ$lostpwUrl$registerUrl

สุดท้าย แต่ไม่ท้ายสุดคุณต้องโทรหา class ที่เกี่ยวกับ action action ที่ถูกต้อง สำหรับธีมควรเป็นafter_setup_themeและสำหรับปลั๊กอินที่คุณสามารถplugins_loadedใช้ได้

ธีม / ฟังก์ชั่น

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.