Buddypress: Username aus Vor- und Nachnamen

Wenn man sich auf einer WordPress Seite mit Buddypress als neuer Nutzer registrieren will, muss standardmäßig ein Benutzername und ein Name eingegeben werden. Ich wollte aber gerne Vor- und Nachname bei der Registrierung abfragen. Ein Nutzername sollte nicht vergeben werden müssen. Dieser sollte automatisch aus Vor- und Nachnamen generiert werden.

Vorüberlegung

Wenn sich ein Nutzer registriert, muss anschließend eine Aktion ablaufen, die einen Nutzernamen aus Vor- und Nachnamen generiert. Am einfachsten schien mir, bei der Registrierung einen zufälligen Nutzernamen zu vergeben (Zufällig deshalb, weil ich nicht weiß was geschieht, wenn zwei Nutzer mit dem gleichen Username sich genau zeitgleich registrieren wollen). Anschließend sollte dieser per mysql UPDATE geändert werden.

Ich brauchte also eine Funktion, die gleich nach der Registrierung greift: user_register(). An diese hänge ich also meine eigene Funktion, die den Usernamen generiert und in die Datenbank schreibt, an.

Durchführung

Einen zufälligen Username generieren und eintragen

Die Lösung von "GuillaumeS" bei wordpress.org konnte ich bequem anpassen, damit ein zufälliger Name erstellt und eingetragen wird. Der Code der Plugindatei sieht so aus:

/*
Plugin Name: Auto Generated numbered Username
Version: 1.0
Plugin URI:
Description: Simple WordPress plugin to automatically generate numbered username, hook in to wordpress user registration page and automaitcally add			 			 numbered Username in "Username" Field.
*/
	// current page
	global $pagenow;

	// hook in to user registration form

	add_action('register_form', 'add_default_username');

	// add in theme header
	add_action('wp_head', 'add_default_username');

	// Function to add numbered username in user registration page
	function add_default_username()
	{
		// get next username
	
		 // add $next_username to user login field value in user registration form
		 // and this field to redonly so that user cannot changed using jQuery
		 ?>
		 <script type="text/javascript">
			function randString(n)
			{
				if(!n)
				{
					n = 10;
				}
			
				var text = '';
				var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
			
				for(var i=0; i < n; i++)
				{
					text += possible.charAt(Math.floor(Math.random() * possible.length));
				}
			
				return text;
			}
			
			jQuery(document).ready(
				function(){
					var username = randString();
					jQuery('input[name="signup_username"]').val( username );
					jQuery('input[name="signup_username"]').attr('readonly', 'readonly');	
				}
			);
		  </script>
		  <?php
	}

Hier wird mit Hilfe von jQuery ein zufälliger Username generiert und in das Feld mit dem Attribut name="signup_username" eingetragen.

Username aus Vor- und Nachnamen erzeugen und in die Datenbank eintragen

In die functions.php meines Themes schreibe ich folgendes:

add_action('user_register', 'themename_change_username');
function themename_change_username($user_id) {
	global $wpdb;
	
	$vorname = htmlspecialchars($_POST['field_7']);
	$nachname = htmlspecialchars($_POST['field_2']);
	$vorname = str_replace(" ", "-", $vorname);
	$nachname = str_replace(" ", "-", $nachname);
	$vorname = str_replace("'", "-", $vorname);
	$nachname = str_replace("'", "-", $nachname);
	$new_username = strtolower($vorname) ."-" .strtolower($nachname);
	
	if ( username_exists($new_username) ){
		$name = $new_username;
		$i = 0;
		while (username_exists($new_username)){
			$new_username = $name . (++$i);	
		}
		
		$wpdb->query(
			"UPDATE $wpdb->users 
			SET user_login = '$new_username', user_nicename = '$new_username'
			WHERE ID = $user_id "
		);

	}else{
		$wpdb->query(
			"UPDATE $wpdb->users 
			SET user_login = '$new_username', user_nicename = '$new_username'
			WHERE ID = $user_id "
		);
	}

}

Für die Datenbankaktionen stelle ich die Klasse $wpdb zur Verfügung. Anschließend werden die übergebenen Inhalte der Felder für Vor- und Nachname in den entsprechenden Variablen gespeichert. Nun werden noch Leerzeichen und das einfache Anführungszeichen (für Namen wie O'Reilly) durch einen Bindestrich ersetzt.

Der neue Username – zusammengesetzt aus Vor- und Nachname, getrennt von einem Bindestrich – wird in der Variablen $new_username gespeichert. Alle Zeichen werden in Kleinbuchstaben umgewandelt.

Auf doppelten Namen prüfen

Einige Namen kommen ja doch recht häufig vor, weshalb es sinnvoll ist zu prüfen, ob ein so generierter Benutzername schon in der Datenbank vorhanden ist. Das geht mit der WordPress Funktion username_exists(). Wenn der Username bereits existiert, wird mit Hilfe einer Schleife der Name um eine Zahl ergänzt. Diese wird so lange um eins erhöht, bis der neue Name nicht in der Tabelle vorkommt.

Dieser neue Name wird dann per MySQL in die Datenbank geschrieben. Wenn der Name von Anfang an noch nicht existiert hat, wird er im else-Teil unverändert eingefügt.

Das könnte auch interessant sein

3 Kommentare zu »Buddypress: Username aus Vor- und Nachnamen«

  1. Philipp Pistis

    Hallo Florian,

    genau das brauche ich für meine Buddypress Seite. Kannst du das bitte für mich einstellen und dokumentieren, was genau geändert wurde. Wird diese Änderung von WordPress Updates überschrieben?

    Bitte melde dich kurz, hätte noch andere Anpassungswünsche.

    Viele Grüße
    Philipp

  2. Dani

    Hallo,
    der Beitrag ist schon etwas älter, aber vielleicht kannst du mir ja noch helfen. Hätte auch gern in der Registrierung die Möglichkeit nur Vor und Nachname angeben zu lassen, der so dann auch zusammengesetzt angezeigt werden soll.
    Ich verstehe auch nicht ganz den Zusammenhang von WordPress und Buddypress, was das angeht, bei meiner momentanen Registrierung kann man einmal den Benutzernamen eingeben und dann aber auch einen Nicknamen.. wo ist da der Unterschied? Und wie kann Buddypress Vor und Nachnamen beziehen?

    Wär super, wenn du mir etwas unter die Arme greifen könntest, komm nicht weiter.

    1. Florian

      Hallo Dani,

      leider habe ich mich schon länger nicht mehr mit BuddyPress auseinandergesetzt, aber ich versuche mal zusammenzubekommen, was ich noch im Kopf habe 🙂
      Du kannst im Backend bei den BuddyPress-Einstellungen Felder angeben, die bei der Registrierung angezeigt werden sollen. Da kannst du glaube ich auch den Nicknamen löschen. Da müsstest du dann ein Feld für den Vornamen und eins für den Nachnamen anlegen (wo das da ganz genau ist, weiß ich aus dem Kopf leider nicht mehr und ich habe gerade auch keine BuddyPress-Installation zur Hand ... ).
      Der Benutzername ist der für die Anmeldung, der Nickname wird vermutlich der Name sein, der auf der Seite für andere sichtbar ist.

      Ich hoffe, das hilft dir etwas weiter.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.