Heute habe ich ein neues Plugin für euch erstellt. Ein Plugin, das sich mit den Kontaktmethoden von Benutzern befasst. Grundsätzlich gibt es beim Bearbeiten eines Benutzers in der Verwaltung einen Block „Kontaktinformationen“. Nun, ich möchte Ihnen zeigen, wie Sie dort Ihre eigenen Felder hinzufügen, und um etwas weiter zu gehen, wie Sie diese neuen Felder auf der Registrierungsseite anzeigen (oder nicht).
Hier ist eine Vorschau dessen, was wir erstellen werden:
Und dafür werden wir wie immer ein schönes und einfaches Plugin erstellen!
Schritt 1: Erstellen Sie das Plugin
Erstellen Sie einen neuen Ordner in wp-content/plugins und nennen Sie ihn „custom-user-contact-methods“. Erstellen Sie in diesem neu erstellten Ordner eine Datei namens „rc-custom-user-contact-methods.php“ und öffnen Sie sie in Ihrer bevorzugten Editor-Software.
Platzieren Sie diesen Inhalt in Ihrer leeren Datei. Dieser Code registriert einfach das Plugin:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
Schritt 2: Definieren Sie Ihre benutzerdefinierten Felder
Als nächstes müssen wir eine Variable erstellen, die unsere benutzerdefinierten Felder enthält, die auf der Benutzereditionsseite und auch auf der Registrierungsstandardseite verwendet werden sollen. Speichern wir diese Felder in einer Variablen namens $extra_fields.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
Wir speichern jedes Feld in einem Array mit 3 Parametern, der erste ist die Feld-ID, der zweite ist die Feldbezeichnung und der letzte ist eine boolesche Information, die definiert, ob das Feld auf der Registrierungsseite angezeigt wird oder nicht . Sie können beliebig viele Parameter hinzufügen, beispielsweise einen Platzhalter oder eine erforderliche Information.
Schritt 3: Haken Sie den richtigen Filter ein
Wir müssen jetzt eine Funktion an den richtigen Filter anhängen. In unserem speziellen Fall lautet der Filter „user_contactmethods“ und der Name der Funktion, die wir erstellen werden, ist „rc_add_user_contactmethods“.
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
Schritt 4: Erstellen Sie unsere benutzerdefinierten Felder
Wir müssen nun die Funktion „rc_add_user_contactmethods“ erstellen. Es ist dasjenige, das unsere benutzerdefinierten Felder zur Benutzerbearbeitungsseite hinzufügt. Die gute Nachricht ist, dass wir unsere Felder in einem Array gespeichert haben. Dies bedeutet, dass die folgende Funktion vollständig dynamisch ist und es ziemlich einfach ist, neue Felder hinzuzufügen, indem Sie einfach die Variable $extra_fields ändern.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
Wenn Sie in diesem Schritt das Plugin speichern und aktivieren, sollten Sie Ihre benutzerdefinierten Felder auf der Benutzerbearbeitungsseite sehen. Da wir den richtigen Hook verwenden, müssen wir keine Felddaten „speichern“. Das Plugin funktioniert im Moment also hervorragend. Aber ich möchte noch etwas weiter gehen und die Option hinzufügen, diese Felder auf der Registrierungsseite anzuzeigen. Stellen Sie sicher, dass Sie in den Einstellungen das Kontrollkästchen „Jeder kann sich registrieren“ aktivieren, sonst wird der Link „Registrieren“ nicht angezeigt.
Schritt 5: Registrierungsseiten-Hooks
Um unsere Felder auf der Registrierungsseite hinzuzufügen, müssen wir auf mindestens zwei Hooks zugreifen und zwei Funktionen erstellen. Eine zum Anzeigen der Felder und die zweite zum Speichern der Felddaten in der Datenbank.
Lassen Sie uns unsere Funktionen einhaken:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
Schritt 6: Registrierungsseite für benutzerdefinierte Felder anzeigen
Im obigen Code haben wir zwei Funktionen deklariert. Die erste besteht darin, die Felder auf der Registrierungsseite anzuzeigen. In diesem Teil müssen wir uns um den dritten Parameter jedes Arrays in $extra_fields kümmern. Dieser boolesche Parameter gibt an, ob die Felder angezeigt werden müssen oder nicht. True: das Feld wird angezeigt, false: das Feld wird nicht angezeigt.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
Schritt 7: Feldwerte beim Registrierungsprozess speichern
Da nun unsere Felder auf der Registrierungsseite angezeigt werden, müssen wir ihre Werte in der Datenbank speichern. Dies ist das Ziel der Funktion „rc_user_register_save_extra_fields“. Dazu müssen wir das „wp_update_user()”-Funktion.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Abschluss
Nun, wir haben die Grundlagen gesehen, wie man den Benutzerkontaktmethoden neue Felder hinzufügt, aber das ist alles. Sie können beispielsweise vorhandene Felder wie „Yahoo IM“, „AIM“ und „Jabber“ mit einem einfachen unset() entfernen. Sie können jedoch auch einige Funktionen hinzufügen, um Ihre benutzerdefinierten Felder zu bereinigen, um beispielsweise zu überprüfen, ob die Telefonnummer ein geeignetes Format hat, ob ein Feld erforderlich ist oder nicht usw. usw. Zögern Sie nicht, in den Kommentaren nach bestimmten Funktionen zu fragen!
Oh, und noch eine letzte Sache… wenn Sie die Daten eines Ihrer Felder anzeigen möchten, verwenden Sie einfach Folgendes:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );