web-dev-qa-db-de.com

Überprüfen Sie das Feld Benutzerdefinierte Anmeldung

Ich habe der WordPress-Anmeldeseite ein zusätzliches Anmeldefeld hinzugefügt. Dies ist ein Kontrollkästchen, das aktiviert sein muss (um die allgemeinen Geschäftsbedingungen zu akzeptieren), da sich der Benutzer sonst nicht anmelden kann.

Ich habe Code aus dieser Frage genommen was mir erlaubt hat, dem Login ein benutzerdefiniertes Kontrollkästchen hinzuzufügen. Beim Versuch, den angegebenen Code zu ändern, um zu überprüfen, ob das Kontrollkästchen aktiviert ist, kann ich jedoch nicht mit der Arbeit beginnen.

function check_checkbox($user) {
    $acceptance = $_POST['terms_acceptance'];

    $user = get_user_by('login', $username );

    if( !$user || !isset($acceptance) ){
        remove_action('authenticate', 'wp_authenticate_username_password', 20);

        $user = new WP_Error( 'denied', __("<strong>ERROR</strong>: You're unique identifier was invalid.") );
    }

    return null;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );

Ich habe die Filter "authentifizieren" und "wp_authenticate_user" wie gezeigt ausprobiert, aber keine hat bei mir funktioniert.

Kann mir jemand sagen, was ich falsch mache?

1

Hier ist der vollständige Arbeitscode in functions.php :

add_action('login_form','my_added_login_field');
function my_added_login_field(){
?>
    <p>
        <label for="my_extra_field">I agree to the terms<br />
        <input type="checkbox" value="1" class="input" id="my_extra_field" name="my_extra_field_name"/></label>
    </p>
<?php
}

function check_checkbox($user, $password)
{
    if( !isset($_POST['my_extra_field_name']) )
     {
        remove_action('authenticate', 'wp_authenticate_username_password', 20);
        $user = new WP_Error( 'denied', __("<strong>ERROR</strong>: Please agree to our terms.") );
    }

    return $user;
}
add_filter( 'wp_authenticate_user', 'check_checkbox', 10, 3 );
2
P-S

Nach dem Kodex ...

add_filter('wp_authenticate_user', 'myplugin_auth_login',10,2);
function myplugin_auth_login ($user, $password) {
     //do any extra validation stuff here
     return $user;
}

Sie müssen das Objekt $user zurückgeben. Ihre Funktionalwaysgibt null zurück. Dies ist völlig ungetestet, aber es sieht so aus, als müssten Sie nur return $user; in der letzten Zeile anstelle von return null; verwenden

0
s_ha_dum