Eigene Felder im Benutzer-Profil hinzufügen

Veröffentlicht von

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)