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().

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' );
Klingt echt interessant, vor allem, da ich gerne ein Bild des jeweiligen Users hinterlegen würde und nicht auf die Gravatars zurückgreifen will.
Wäre es da auch sinnvoll dieses Extra-Feld anzulegen?
Oder gäbe es da eine bessere Lösung?
Dnake für eine Antwort
Mella
@mella: wenn du unabhängig von anderen Diensten sein willst und das Bild zum User gehört, dann ist dies genau die richtige Lösung. Allerdings musst du dann einen Upload-Prozess rein holen, der aber von WP im Backend vorhanden ist, via Gravatar könnte man eben via E-Mail das Bild nutzen und fertig.
Super, dann muss ich mich nur noch mit diesem Up-Load-Prozess beschäftigen - hast Du einen Tipp, von wo ich den in WP "rauskopieren" kann. Bin da leider noch zu sehr Anfänger dafür
Mella
Mella, da gibt es auch eine tolle Plugin-Lösung, die mir persönlich gut gefällt: http://wordpress.org/extend/plugins/sem-author-image/
Hallo,
ich möchte unter buddypress den Wohnort noch einbauen, damit die Url beispielsweise wie folgt aussieht:
http://www.domain.de/members/singles-in-%ort%/username
Den Ort kann ich als zusätzliches Textfeld in buddypress-backend definieren. wie kann ich aber die URL wie oben angezeigt erstellen lassen?
Grüße
Joachim
@Joachim: den Ort lässt du vom User pflegen, wie im Tutorial mit Adress, den Wert benutzt du dann und baust die URL zusammen, da du ja alle anderen Strings im Blog hast,
get_bloginfo('url')und$user_info = get_userdata($user_id); $author_nice=$user_info->display_name;@Enno, danke für den Tipp. Hab ich gleich eingebaut.
Mella
klingt prima
aber wo genau baue ich zusammen?
@Joachim: in der Ausgabe, da wo du den String-Url nutzen möchtest. ich würde es vermutlich im Plugin machen und dann nur im Frontend / Backend abrufen.
@Mella
Es gibt auch das Plugin "Add Local Avatar" von Peter Sterling - da hast du alles drin:
- lokale Avatare inkl. Upload
- Twitter-Ava
- Gravatar
und das alles sogar in absteigender Priorität, d.h. Gravatar wird erst benutzt, wenn die beiden anderen nicht zur Verfügung stehen.
Sieht sehr interessant aus. Welche Art von Erweiterungen kommen da in Frage? Text und Bilder? Wie ist es dann bei WordPress Updates? Werden die Sachen dann wieder überschrieben?
@Ole: um diese Fragen zu klären solltest du vermutlich etwas tiefer in die Materie einsteigen, ansonsten ist das Erweitern via Code wohl zu heftig.
hi,
bei der Entwicklung eines plugins bin ich auf ein ähnliches problem gestoßen.also es ist nicht ganz ähnlich aber ich versuche das zu schildern. also ich will im frontend den user "select-felder" anbieten wo die z.B. kategories auswählen können und dann ein tagcloud mit den ausgewählten kategorien erzeugen(also die daten in einer php-function gebraucht) mein problem ist : ich will dass nur der div-bereich (nicht die ganze seite) neu geladen wird...
Vielen Dank für die ganzen Tips. Kann ich gerade wirklich gut gebrauchen und hier ist alles echt gut erklärt. Die Fragen, die ich noch hatte, wurden schon vor mir gestellt und beantwortet
Danke!
Ich war gerade auf der Suche nach einer entsprechenden Möglichkeit. Aber wie so oft bei WordPress, ist das echt easy. Danke für den hilfreichen Beitrag
Danke für das nützliche Snippet. Das macht die Verwaltung meiner User im Blog gleich viel einfacher!
Danke für den Tipp! Wäre aber noch wichtig zu wissen, wie man die Rechte des aktiven Nutzers einstellen kann. Bei mir klappt das irgendwie nicht.
@Tom: die Rechte kann man recht einfach mit dem Plugin Members anpassen, alternativ via eigenem Code, schon älter und die Level 1-10 sollten nicht genutzt werden, statt dessen eben die Objekte wie
'manage_categories'Klasse, genau nach so was hab ich gesucht, endlich eigene Felder im User-Profil...
Danke, dann werde ich mich wohl die nächsten Tage weiter damit beschäftigen und mein eigenes Theme weiter machen
Diesmal muss ich mich bei den Menschen bedanken, die schon Kommentare zum Thread geschrieben haben. Ihr hattet alle die gleichen Fragen wie ich und schwupps, wurden sie beantwortet. Ein Hoch auf die Möglichkeit, Kommentare schreiben zu können
Und natürlich auch ein Danke an den Autor, es klappt jetzt tatsächlich alles, ich kanns noch garnicht fassen. Ewig und drei Tage suchte ich nach einer Lösung, die auch funtkioniert. Und wo finde ich sie? Hier. Super!
Vielen Dank für die nützlichen Tipps. Da habe ich genug Material für die nächsten Wochen
Wäre Anpassung auch in dieser Richtung machbar: Start- und Enddatum (expiration)?
Der Nutzer kann sich nur in einem best. Zeitraum anmelden.
@Ramona: ja, sollte gehen - wobei man via Cron prüfen müsste, ob noch gültig. Bei einem Kunden kenne ich das, da wurde von uns implementiert, dass User, die nach 4 Wochen nicht angemeldet waren, ihr Passwort verlieren und geblockt sind.
hallo,
lässt sich der Inhalt des neuen Feldes auch in der Tabelle der Benutzerübersicht (Auflistung aller User) ausgeben?
@Marcus: ja, aber dazu muss man erweitern; an dieser Stelle sind weitere Hooks da, die man mit Inhalten füllen kann.
wow, danke für deine schnelle Antwort. Kannst du mir einen Anhaltspunkt geben? Ich denke mal das geht dann auch über die add_action Hooks?
@Marcus: ja, via add_filter(); Hooks: manage_edit-".$post_type."_columns und manage_edit-".$post_type."_sortable_columns
Vielen Dank. Ich habe gleich mal ein wenig probiert und möchte euch mein Ergebnis natürlich nicht vorenthalten. Mit folgendem Code funktioniert es:
--------------------------------------------
function add_column($column) {
$column['column_header'] = 'Anschrift';
return $column;
}
function fill_column($value, $column_name, $id) {
$field_value = get_the_author_meta('address',$id);
if (!$field_value) {
$field_value = "-";
}
return $field_value;
}
add_filter('manage_users_columns', 'add_column');
add_filter('manage_users_custom_column', 'fill_column', 10, 3);
hi, ist es denn möglich, dass im Profil der WordPress-Benutzer ein Geburtsdatum einstellbar ist, welches dann auch später ausgegeben werden kann?
So wäre die Pflege für Altersangaben um Längen angenehmer
Vielen Dank schonmal!
@marvin: ja, genau mit dieser Lösung kann sowas erweitert werden
Das ist gut zu hören, danke! Ich habe es folglich nach diesem Tutorial geschafft eine Altersangabe, auf meiner aktuellen Kundenwebsite, zu generieren.
Nur da hört es für mich leider schon auf und ich hab keine explizite Lösung für das Problem. Es wäre spitze, wenn im WordPress Profil Geburtsdaten im Format DD/MM/YYYY angegeben werden und daraus das Alter errechnet wird, welches dann auf der oben verlinkten Seite bei Alter ausgegeben wird
Ich hoffe du oder jemand anderes könnte mir dabei helfen!
Funktioniert soweit sehr gut, aber wo zur hölle werden die Daten denn gespeichert? Bin ich blind?
@Matthias: in den user meta daten