Eigene Felder im User-Profil von WordPress

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 13 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Das Benutzerprofil von WordPress läßt sich recht einfach anpassen um eigene Werte hinzuzufügen. So kann man entsprechend den Anforderungen die notwendigen Felder hinzufügen. Wie das geht möchte ich einem einfach Beispiel aufzeigen.

Dabei wird lediglich ein Feld für die Adresse hinzugefügt und die Inhalte werden in der Datenbank gespeichert. Diverse Hooks in WordPress sorgen dafür, dass man sich lediglich um die Felder kümmern muss und das Speichern übernimmt der Standard-Ablauf.

Die Funktion zum Speichern der Einträge ist fb_save_custom_user_profile_fields() und hier ist es wichtig die Rechte des jeweils aktiven Users zu prüfen; nur wenn die entsprechenden Rechte vorhanden sind, in dem Fall zum Editieren von Usern (edit_user), dann dürfen Daten gespeichert werden.
Das eigentliche Speichern der Daten erfolgt via Funktion update_usermeta().

Eigene Felder im WordPress Benutzer-Profil

Es kann natürlich jede Art von Felder übergeben werden, das input-Feld dient nur als Beispiel. Es empfiehlt sich die Funktionen in ein Plugin auszulagern; alternativ geht auch die functions.php des Themes, die hierfür aber sicher nicht der richtige Weg ist.

Jede Funktion des kleinen Beispiels wurde auf zwei Hooks verwiesen. Dies hat den Grund, dass WordPress zwischen dem Editieren von User-Profilen und dem Update der persönlichen Daten unterscheidet. Dies geschieht mittels der Konstante IS_PROFILE_PAGE. Im Standard ist diese Konstante auf TRUE und damit würden die Hooks show_user_profile und personal_options_update ausreichen um neue Felder einzubringen und zu speichern. Dies kann aber je nach Installation verschieden sein und mit diesem Weg kann der Admin keine dieser neuen Felder pflegen. Insbesondere dafür sind zwei weiteren Hooks notwendig. Umgedreht kann es aber sicher viele Anwendungsfälle geben; also Daten die der Admin pflegen muss und der jeweilige User in seinem Profil nicht sieht.


function fb_add_custom_user_profile_fields( $user ) {
?>
	<h3><?php _e('Extra Profile Information', 'your_textdomain'); ?></h3>
	
	<table class="form-table">
		<tr>
			<th>
				<label for="address"><?php _e('Address', 'your_textdomain'); ?>
			</label></th>
			<td>
				<input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
				<span class="description"><?php _e('Please enter your address.', 'your_textdomain'); ?></span>
			</td>
		</tr>
	</table>
<?php }

function fb_save_custom_user_profile_fields( $user_id ) {
	
	if ( !current_user_can( 'edit_user', $user_id ) )
		return FALSE;
	
	update_usermeta( $user_id, 'address', $_POST['address'] );
}

add_action( 'show_user_profile', 'fb_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'fb_add_custom_user_profile_fields' );

add_action( 'personal_options_update', 'fb_save_custom_user_profile_fields' );
add_action( 'edit_user_profile_update', 'fb_save_custom_user_profile_fields' );

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.