Hier ein Beispiel, wie man mit einem Plugin neue Felder im Benutzer-Profil anlegen kann.
Als erstes legen wir in dem Plugin-Ordner von WordPress ein neuen Ordner an. z.B.:
/wp-content/plugins/my-custom-user-field
In den Ordner „my-custom-user-field“ werden folgende Dateien angelegt.
- userCustomFields.php
- main-user-fields.php
- index.html
Als nächstes erstellen wir ein benutzerdefiniertes Feld, in diesem Beispiel nennen wir es „Firma“, um Ordnung in den Code zu bekommen, arbeite ich in PHP mit Kassen.
userCustomFields.php
<?php
class UserCustomFields {
public function __construct() {
}
public function add_customFields() {
// User kann die Felder sehen und bearbeiten
//add_action( 'show_user_profile', 'custom_user_profile_fields' );
// nur der Admin kann die Felder sehen und bearbeiten, Der Admin kann seine Felder Felder nicht sehen und bearbeiten
add_action( 'edit_user_profile', array( $this, 'custom_user_profile_fields'));
// Die Felder werden angezeigt, wenn ein neuer User angelegt wird
add_action( "user_new_form", array( $this, 'custom_user_profile_fields'));
// Wird sofort ausgelöst, nachdem ein neuer Benutzer registriert wurde
add_action('user_register', array( $this, 'save_custom_user_profile_fields'));
// Wird sofort ausgelöst, nachdem ein vorhandener Benutzer aktualisiert wurde.
add_action('profile_update', array( $this, 'save_custom_user_profile_fields'));
}
public function save_custom_user_profile_fields( $user_id){
# again do this only if you can
if(!current_user_can('manage_options'))
return false;
update_user_meta($user_id, 'firma', $_POST['firma']);
}
public function custom_user_profile_fields($user){
// TextField Firma -> Daten werden aus der Datenbank geholt und ins Textfeld geschrieben
if(is_object($user))
$firma= esc_attr( get_the_author_meta( 'einrichtung', $user->ID ) );
else
$firma= null;
?>
<!-- <hr class="solid" style="margin-top: 100px;"> -->
<h3 style="margin-top: 100px;">My Custom Fields</h3>
<hr class="solid">
<table class="form-table">
<tr>
<th><label for="firma">Firma</span></label></th>
<td>
<input type="text" class="regular-text" name="firma" value="<?php echo $firma; ?>" id="firma"/><br />
<span class="description"><?php _e( '(required)' ); ?></span>
</td>
</tr>
</table>
<hr class="solid">
<?php
}
}
?>
Code-Sprache: HTML, XML (xml)
Hier nochmal eine Variante, wo das Textfeld ein Pflichtfeld ist, wenn das Textfeld leer ist, wird eine Fehlermeldung ausgegeben.
userCustomFields.php
<?php
class UserCustomFields {
public function __construct() {
}
public function add_customFields() {
// User kann die Felder sehen und bearbeiten
//add_action( 'show_user_profile', 'custom_user_profile_fields' );
// nur der Admin kann die Felder sehen und bearbeiten, Der Admin kann seine Felder Felder nicht sehen und bearbeiten
add_action( 'edit_user_profile', array( $this, 'custom_user_profile_fields'));
// Die Felder werden angezeigt, wenn ein neuer User angelegt wird
add_action( "user_new_form", array( $this, 'custom_user_profile_fields'));
// Mit der function wird kontrolliert, ob alle erforderlichen custom fields ausgefüllt sind
// wenn ja -> werden die custom fields in der DB gespeichert
// wenn nein -> wird eine Fehlermeldung angezeigt
add_action('user_profile_update_errors', array( $this, 'check_custom_user_profile_fields_required'), 10, 3);
}
public function check_custom_user_profile_fields_required($errors, $update, $user_id){
if( empty($_POST['firma']) )
$errors->add( 'firma',__('Das Textfeld "Firma" ist erforderlich, bitte das Feld ausfüllen.') );
# Wenn es kein error gibt, dann save my custom fields
if( empty( $errors->errors ) ){
// Wird sofort ausgelöst, nachdem ein neuer Benutzer registriert wurde
add_action('user_register', array( $this, 'save_custom_user_profile_fields'));
// Wird sofort ausgelöst, nachdem ein vorhandener Benutzer aktualisiert wurde.
add_action('profile_update', array( $this, 'save_custom_user_profile_fields'));
}
}
public function save_custom_user_profile_fields( $user_id){
# again do this only if you can
if(!current_user_can('manage_options'))
return false;
update_user_meta($user_id, 'firma', $_POST['firma']);
}
public function custom_user_profile_fields($user){
// TextField Firma -> Daten werden aus der Datenbank geholt und ins Textfeld geschrieben
if(is_object($user))
$firma= esc_attr( get_the_author_meta( 'einrichtung', $user->ID ) );
else
$firma= null;
?>
<!-- <hr class="solid" style="margin-top: 100px;"> -->
<h3 style="margin-top: 100px;">My Custom Fields</h3>
<hr class="solid">
<table class="form-table">
<tr>
<th><label for="firma">Firma</span></label></th>
<td>
<input type="text" class="regular-text" name="firma" value="<?php echo $firma; ?>" id="firma"/><br />
<span class="description"><?php _e( '(required)' ); ?></span>
</td>
</tr>
</table>
<hr class="solid">
<?php
}
}
?>
Code-Sprache: HTML, XML (xml)
Kurze Erklärung zum Code
Das benutzerdefinierte Feld wird in der Datenbank gespeichert. Die Daten werden in der Tabelle „wp_usermeta“ mit dem „meta_key -> firma“ gespeichert.
function save_custom_user_profile_fields($user_id){
# again do this only if you can
if(!current_user_can('manage_options'))
return false;
# save my custom field
update_user_meta($user_id, 'firma', $_POST['firma']);
}
// Wird sofort ausgelöst, nachdem ein neuer Benutzer registriert wurde
add_action('user_register', 'save_custom_user_profile_fields');
// Wird sofort ausgelöst, nachdem ein vorhandener Benutzer aktualisiert wurde.
add_action('profile_update', 'save_custom_user_profile_fields'); Code-Sprache: PHP (php)
Die Daten können mit diesem Befehl aus der Datenbank geholt werden.
$firma = esc_attr( get_the_author_meta( 'firma', $user->ID ) );
// oder mit
$current_user->einrichtung;Code-Sprache: PHP (php)
Hier noch die Main-Datei, womit das Plugin eingefügt (bzw. das customField) wird.
main-user-fields.php
<?php
/*
Plugin Name: My Custom User Field
Description:
Version: 0.0.1
Author: Inge
Author URI:
*/
/*
Damit unsere PHP-Datei nicht von außerhalb unserer WordPress-Instanz ausgeführt werden kann,
überprüfen wir nach dem Header-Kommentar ob die Konstante „ABSPATH“ gesetzt ist.
Die Konstante „ABSPATH“ wird in der „wp-config.php“ definiert und beinhaltet den absoluten Dateipfad zur WordPress Installation.
*/
defined( 'ABSPATH' ) or die( 'Are you ok?' );
// Die Datei mit den CustomFields einbinden
require_once 'userCustomFields.php';
// Eine Instanz der Main-Klasse erstellen, ist sozusagen der Start der Anwendung
$mainUserFields = new MainUserFields();
class MainUserFields{
private $userCustomFields;
public function __construct() {
// Eine Instanz der Klasse "UserCustomFields" aus der Datei "userCustomFields.php" erstellen under
// mit "$this->userCustomFields" in der Variable "$userCustomFields" speichern
$this->userCustomFields = new UserCustomFields();
// Wird nur ausgeführt, wenn das Plugin aktiviert wird
register_activation_hook( __FILE__, array( $this, 'my_plugin_activate' ) );
// Wird nur ausgeführt, wenn das Plugin deaktiviert wird
register_deactivation_hook(__FILE__, array( $this, 'my_plugin_deactivation' ) );
// Wird immer ausgeführt
add_action( 'init', array( $this, 'initialisation' ) );
}
public function my_plugin_activate(){
}
public function my_plugin_deactivation(){
}
public function initialisation(){
// Die function aus der Datei "userCustomFields.php" ausführen und die Custom Fields ins User-Profil einfügen
$this->userCustomFields->add_customFields();
}
}
?>Code-Sprache: HTML, XML (xml)
Als nächstes erstellen wir noch eine „index.html“ die in den Plugin-Ordner kommt, damit man nicht von außerhalb zugreifen kann.
index.html
<!-- Silence is golden -->Code-Sprache: HTML, XML (xml)