webentwicklung-frage-antwort-db.com.de

Beschränken Sie den Zugriff auf wp-login.php

Ich habe ein hartcodiertes Anmelde-/Registrierungs-/Passwort-Formular in der Seitenleiste meines Themas. Ich verwende versteckte Eingabe für "redirect_to", die gut funktioniert. Wenn ich jedoch die Anmeldetaste drücke, ohne etwas einzugeben, oder wenn ein Fehler auftritt, wird die Seite wp-login.php aufgerufen.

Ich möchte nicht, dass das passiert. Wenn ein Fehler auftritt, sollte er an der aktuellen Stelle angezeigt werden. Wie kann ich das machen.

Hinweis: Gleiches ist für die Abmeldefunktion erforderlich. Grundsätzlich möchte ich die Seite wp-login.php nicht um jeden Preis für irgendjemanden anzeigen.

3
booota

Die Aktion wp_login_failed wird ausgelöst, wenn die Anmeldung aufgrund einer fehlerhaften Kombination aus Benutzername und Kennwort fehlgeschlagen ist. Das ist also ein guter Anfang. Dies ist ein supereinfaches Beispiel, das nur zur Homepage umleitet.

<?php
add_action( 'wp_login_failed', 'wpse25628_login_failed', 10, 1 );
/**
 * Catches all failed logins and redirect them to the 
 * websites home page.
 */
function wpse25628_login_failed( $username )
{
    /*
    May want to do something here to give the user feedback
    for instance call `global $user;`, which will be a
    wp_error object, you could append the code as a 
    $_GET variable and adjust your front end according to the
    error message
    */
    wp_redirect(
        home_url(),
        302
    );
    exit();
}

Und natürlich gibt es auch einen wp_logout hook! Vielleicht senden Sie den Leuten hier eine Dankes-Seite anstelle der Homepage.

<?php
add_action( 'wp_logout', 'wpse25628_catch_logout' );
/**
 * When a user logs out, send them back to the home page
 */
function wpse25628_catch_logout()
{
    wp_redirect(
        home_url(),
        302
    );
    exit();
}

Leider wird der Hook wp_login_failed nicht ausgelöst, wenn ein Benutzername oder ein Passwort leer ist. Ebenso unglücklich ist das Fehlen von Haken, die ausgelöst werden, wenn ein passiert. Es ist wahrscheinlich besser, dies auf der Clientseite mit Javascript zu überprüfen. Hier ist ein kurzes Beispiel.

jQuery(document).ready(function(){
    jQuery('#loginform').submit(function(e){
        var errors;
        jQuery('#loginform input').each(function(){
            var val = jQuery(this).val()
            if( ! val )
            {   
                errors = true;
            }
        });
        if( errors )
        {
            e.preventDefault();
        }
    });
});
3
chrisguitarguy

Sie können auf diese Weise von wp-login und anderen Standardseiten wegleiten:

add_action('plugins_loaded', 'myAction');
function wpSimpleUserSetup() {
    if (in_array($_SERVER['REQUEST_URI'], array('/wp-login.php', 'wp-login.php?action=register'))) {
        wp_redirect(wp_login_url());
        exit;
    }
}

Darüber hinaus ist die Funktion wp_login_url () steckbar, sodass Sie sie tatsächlich mit Ihrer eigenen überschreiben können:

function myLoginUrl( $redirect = '', $force_reauth = false ) {
    return $custom_url;
}
add_filter( 'login_url', 'myLoginUrl', 9999 );
1
user472179