Ändern des Benutzer-Zeichenlimits von vier auf weniger Zeichen

Ich möchte ein Benutzerkonto bei meiner Installation von WordPress mit mehreren Sites mit einem Benutzernamen mit weniger als 4 Zeichen erstellen. Aber da WordPress ein Limit von Benutzernamen von mindestens 4 Zeichen hat, wird diese Fehlermeldung angezeigt:

Der Benutzername muss mindestens 4 Zeichen lang sein.

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

Solutions Collecting From Web of "Ändern des Benutzer-Zeichenlimits von vier auf weniger Zeichen"

Sie können 'wpmu_validate_user_signup' filtern und prüfen, ob der Fehlercode mit der 4 'wpmu_validate_user_signup' Warnung übereinstimmt. Dann lösche 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; } 

Da es für Benutzernamen mehrere Fehler geben kann, könnte die akzeptierte Antwort Fehler entfernen, die wir beibehalten möchten. Zum Beispiel würde jetzt die Eingabe eines Benutzernamens von 123 passieren, während es vermutlich immer noch die Fehlermeldung 'Sorry, usernames must have letters too!'

Modifizierter 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 * eg 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; } 

EDIT : Das funktioniert in WordPress bis Version 3.9.6 und nochmals 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 Variable gemacht hat. Obwohl eine magische __get-Methode “für die Rückwärtskompatibilität” bereitgestellt wurde, gibt sie für Arrays eine Kopie eines Arrays zurück (keine Referenz auf das Original), die dann nicht editierbar ist. Wenn Sie WP_DEBUG aktiviert haben, erhalten Sie eine PHP-Benachrichtigung mit der Bemerkung “Hinweis: Die indirekte Änderung der überladenen Eigenschaft WP_Error :: $ errors hat keine Auswirkungen in / path / to / plugin on line xxx”, andernfalls schlägt der Code automatisch fehl und hat keine Auswirkungen .

Es funktioniert wieder in Version 4.2, da https://core.trac.wordpress.org/ticket/30891 die Änderung für WP_Error und eine Reihe anderer Stellen im core zurückgenommen hat, allerdings nicht so, dass Code wie dieser funktionieren würde.

Für WordPress> = 4.1, das uns eine remove-Methode gab, funktioniert das 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; }