Ändern der Zeichenbeschränkung für Benutzernamen von vier auf weniger Zeichen

7

Ich möchte ein Benutzerkonto für meine Installation von Wordpress an mehreren Standorten mit einem Benutzernamen von weniger als 4 Zeichen erstellen. Da Wordpress jedoch eine maximale Anzahl von Benutzernamen von mindestens 4 Zeichen hat, wird diese Fehlermeldung angezeigt:

Der Benutzername muss mindestens 4 Zeichen lang sein.

Ich habe eine Lösung gefunden, die einen mu-plugins-Ordner im wp-content-Ordner enthält, aber sie funktioniert nicht. Gibt es eine Möglichkeit, ein Benutzerkonto mit einem Benutzernamen von weniger als 4 Zeichen zu erstellen?

Ratul
quelle
Wenn es Probleme mit meiner Antwort gibt, wäre es hilfreich zu wissen, was nicht funktioniert hat. Ich habe es als Plugin auf einer Multisite getestet und die Benutzer erfolgreich registriert a, bund c.
Fuxia
Eigentlich geht es nicht darum, dass Ihre Antwort mein Problem nicht lösen kann. Es war für mich persönlich einfach nicht sehr nützlich, da ich neu in Wordpress bin.
Ratul
Speichern Sie den Code einfach wie shortnames.phpin Ihrem Plugin-Verzeichnis und aktivieren Sie ihn.
Fuxia

Antworten:

9

Sie können filtern 'wpmu_validate_user_signup'und prüfen, ob der Fehlercode mit der 4-stelligen Warnung übereinstimmt. Dann deaktivieren Sie einfach den Fehlercode.

Beispiel-Plugin:

<?php # -*- coding: utf-8 -*-
/* Plugin Name: Allow short user names for multi site. */

add_filter( 'wpmu_validate_user_signup', 'wpse_59760_short_user_names' );

/**
 * Allow very short user names.
 *
 * @wp-hook wpmu_validate_user_signup
 * @param   array $result
 * @return  array
 */
function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_message( 'user_name' );
    if ( empty ( $error_name )
        or $error_name !== __( 'Username must be at least 4 characters.' )
    )
    {
        return $result;
    }

    unset ( $result[ 'errors' ]->errors[ 'user_name' ] );
    return $result;
}
Fuxia
quelle
3

Da es für Benutzernamen mehr als einen Fehler geben kann, kann die akzeptierte Antwort Fehler beseitigen, die wir beibehalten möchten. Zum Beispiel würde die Eingabe eines Benutzernamens von 123 jetzt vergehen, während vermutlich immer noch die Fehlermeldung angezeigt wird'Sorry, usernames must have letters too!'

Geänderter Beispielcode, um dies zu beheben:

/* Plugin Name: Allow short user names for multi site. */

add_filter( 'wpmu_validate_user_signup', 'wpse_59760_short_user_names' );

/**
 * Allow very short user names.
 *
 * @wp-hook wpmu_validate_user_signup
 * @param   array $result
 * @return  array
 */
function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_messages( 'user_name' );
    if ( empty ( $error_name ) 
        or false===$key=array_search( __( 'Username must be at least 4 characters.' ), $error_name)
    )
    {
        return $result;
    }

//  only remove the error we are disabling, leaving all others
    unset ( $result[ 'errors' ]->errors[ 'user_name' ][$key] );
/**
 *  re-sequence errors in case a non sequential array matters
 *  e.g. if a core change put this message in element 0 then get_error_message() would not behave as expected)
 */
    $result[ 'errors' ]->errors[ 'user_name' ] = array_values( $result[ 'errors' ]->errors[ 'user_name' ] );
    return $result;
}

BEARBEITEN : Dies funktioniert in WordPress bis Version 3.9.6 und erneut in 4.2

Beachten Sie, dass dies in WordPress 4.0 oder 4.1 nicht funktioniert, da https://core.trac.wordpress.org/ticket/22234 die Fehler zu einer privaten Variablen gemacht hat. Obwohl eine magische __get-Methode "aus Gründen der Abwärtskompatibilität" bereitgestellt wurde, gibt sie für Arrays eine Kopie eines Arrays zurück (kein Verweis auf das Original), die dann nicht bearbeitet werden kann. Wenn Sie WP_DEBUG aktiviert haben, erhalten Sie eine PHP-Benachrichtigung mit der Aufschrift "Hinweis: Indirekte Änderung der überladenen Eigenschaft WP_Error :: $ Fehler hat keine Auswirkung auf / path / to / plugin in Zeile xxx", andernfalls schlägt der Code stillschweigend fehl und hat keine Auswirkung .

In Version 4.2 funktioniert es wieder, da https://core.trac.wordpress.org/ticket/30891 die Änderung für WP_Error und eine Reihe anderer Stellen im Kern rückgängig gemacht hat, jedoch nicht, damit Code wie dieser funktioniert.

Für WordPress> = 4.1, das uns eine Methode zum Entfernen gab, funktioniert dies auch:

function wpse_59760_short_user_names( $result )
{
    $error_name = $result[ 'errors' ]->get_error_messages( 'user_name' );
    if ( empty ( $error_name ) 
        or false===$key=array_search( __( 'Username must be at least 4 characters.' ), $error_name)
    )
    {
        return $result;
    }

    // remember any error data
    $data = $result[ 'errors' ]->get_error_data( 'user_name' );

    // remove all user name errors
    $result[ 'errors' ]->remove( 'user_name' );

    // add back in any other user name errors we want to keep
    foreach ( $error_name as $index=>$message ) {
        if ( $index !== $key ) 
            $result[ 'errors' ]->add( 'user_name', $message );
    }

    // restore any user_name error data that was present
    if ( !empty( $data ) ) 
        $result[ 'errors' ]->add_data( $data, 'user_name' );

    return $result;
}
Wander-
quelle