Bagaimana cara menunjukkan 'kesalahan masuk' dan 'kata sandi hilang' di halaman templat saya?

10

Saya memberikan login front-end dalam templat, menggunakan fungsi wp_login_form. Ini menangani pengalihan setelah masuk dan keluar cukup rapi! Tetapi jika nama pengguna / kata sandi tidak cocok, atau tidak ada, pengguna diarahkan ke halaman login admin, dengan kesalahan js yang goyah. Hal yang sama juga terjadi ketika saya mencoba mengatur ulang kata sandi, itu membawa saya ke halaman backend saya di mana saya harus memasukkan email saya untuk mengatur ulang kata sandi. Saya ingin menunjukkan kedua aktivitas ini pada templat saya. Apakah ada cara saya bisa melakukan ini?

Terima kasih atas bantuannya sebelumnya.

Rutwick Gangurde
sumber

Jawaban:

9

Iya itu mungkin. Anda harus membuat tiga filter untuk ini.

Barang admin di dalam kelas

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

Pertama kita perlu memfilter output dari fungsi wp_login_url()yang digunakan oleh wp_login_form()dalam actionatribut form .

Lihatlah metodenya modifyLoginUrl(). Di sini kita menyimpan URL halaman logindi dalam variabel $loginUrl. Halaman ini harus ada di dalam WordPress, jadi buat dulu.

Selanjutnya kita perlu filter untuk fungsi wp_lostpassword_url()dan wp_register(). Pada dasarnya sama. URL situs disimpan di dalam variabel $lostpwUrldan $registerUrl.

Terakhir tetapi tidak kalah pentingnya, Anda harus memanggil kelas di hook tindakan yang tepat. Untuk tema, ini seharusnya after_setup_themedan untuk plugin yang dapat Anda gunakan plugins_loaded.

Tema / fungsi.php

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

Plugin

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
rofflox
sumber
Saya minta maaf untuk menabrak ini, tetapi saya ingin melakukan ini, tetapi saya tidak bisa mengetahuinya! Dalam kode yang Anda berikan, apa yang harus saya ubah?
Bram Vanroy
Bram, jika Anda membuat tema khusus, maka letakkan semua blok kode pertama dan kedua dalam file fungsi tema Anda. Jika Anda membuat plugin, letakkan blok kode pertama dan ketiga dalam file plugin Anda. Sepertinya satu-satunya hal yang harus Anda modifikasi adalah baris ke-9 kelas, di mana dikatakan $loginUrl = site_url('login'); // Link to login URL. Cukup ubah 'login' untuk mencocokkan siput halaman login yang ingin Anda gunakan. Kecuali Rofflox membuat kesalahan sintaks yang tidak saya lihat, ini sepertinya bekerja dengan baik.
Jen
@guiniveretoo Terima kasih atas balasan Anda! Masalahnya adalah saya bekerja dengan formulir dropdown yang dapat diakses dari halaman mana saja di situs web. Jadi, tidak ada siput pasti yang mungkin, karena orang dapat masuk dari halaman mana pun ... Jadi, apa yang harus saya letakkan di sana?
Bram Vanroy
1
Bram - Wordpress memerlukan url login sehingga jika ada beberapa kesalahan pengguna atau serupa, ada tempat bagi mereka untuk pergi dan mengatur ulang kata sandi mereka atau mendaftar untuk akun. Mengatur url login menyediakan halaman itu. Saya melakukan persis pengaturan ini dengan proyek tahun lalu: kotak login javascript yang muncul dengan formulir login - jika mereka memasukkan info mereka dengan benar, itu mengirimkannya ke wp-admin; jika tidak, mereka berakhir pada halaman login khusus untuk mencoba lagi atau mengatur ulang kata sandi mereka.
Jen