Understanding and Implementing Custom User Profile Fields in WordPress
Published: 2023-12-18 07:47:32

The provided code defines a class named `WSEL_User_Fields` in WordPress that facilitates the addition of custom fields to user profiles. These fields include "Membership number," "Join Date," and "Re Registration Date." Let's break down the code and understand how it works:

#### Class Initialization:

```php
if ( ! class_exists( 'WSEL_User_Fields' ) ) :
	class WSEL_User_Fields {
```

This conditional check ensures that the class `WSEL_User_Fields` is defined only if it doesn't already exist.

#### Constructor:

```php
public function __construct() {
    add_action( 'show_user_profile', array( $this, 'wsel_profile_fields' ), 999 );
    add_action( 'edit_user_profile', array( $this, 'wsel_profile_fields' ), 999 );

    add_action( 'personal_options_update', array( $this, 'wsel_save_profile_fields' ) );
    add_action( 'edit_user_profile_update', array( $this, 'wsel_save_profile_fields' ) );
}
```

The constructor sets up various WordPress actions to display and save the custom user profile fields. The `show_user_profile` and `edit_user_profile` actions are used to display the fields, while `personal_options_update` and `edit_user_profile_update` are used to save the field values.

#### Saving Profile Fields:

```php
public function wsel_save_profile_fields( $user_id ) {
    // Checks for security nonce and user capability
    if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-user_' . $user_id ) ) {
        return;
    }

    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return;
    }

    // Update user meta with sanitized field values
    update_user_meta( $user_id, 'wsel_membership_number', sanitize_text_field( $_POST['wsel_membership_number'] ) );
    update_user_meta( $user_id, 'wsel_join_date', sanitize_text_field( $_POST['wsel_join_date'] ) );
    update_user_meta( $user_id, 'wsel_re_registration_date', sanitize_text_field( $_POST['wsel_re_registration_date'] ) );
}
```

This function handles the saving of custom field values when a user updates their profile. It checks for security nonce verification and user capabilities before updating the user meta with the sanitized values.

#### Displaying Profile Fields:

```php
public function wsel_profile_fields( $user ) {
    // Retrieve custom field values
    $wsel_membership_number    = get_user_meta( $user->ID, 'wsel_membership_number', true );
    $wsel_join_date            = get_user_meta( $user->ID, 'wsel_join_date', true );
    $wsel_re_registration_date = get_user_meta( $user->ID, 'wsel_re_registration_date', true );
    ?>
    <!-- HTML markup to display the custom fields -->
    <h3>Additional Information</h3>
    <table class="form-table">
        <!-- Membership number field -->
        <tr>
            <th><label for="wsel_membership_number">Membership number</label></th>
            <td>
                <input type="text" name="wsel_membership_number" id="wsel_membership_number" value="<?php echo esc_attr( $wsel_membership_number ); ?>" class="regular-text" />
            </td>
        </tr>
        <!-- Join Date field -->
        <tr>
            <th><label for="wsel_join_date">Join Date</label></th>
            <td>
                <input type="text" name="wsel_join_date" id="wsel_join_date" value="<?php echo esc_attr( $wsel_join_date ); ?>" class="regular-text" />
            </td>
        </tr>
        <!-- Re Registration Date field -->
        <tr>
            <th><label for="wsel_re_registration_date">Re Registration Date</label></th>
            <td>
                <input type="text" name="wsel_re_registration_date" id="wsel_re_registration_date" value="<?php echo esc_attr( $wsel_re_registration_date ); ?>" class="regular-text" />
            </td>
        </tr>
    </table>
    <?php
}
```

This function generates the HTML markup for displaying the custom fields on the user profile page. It retrieves the stored values and populates the input fields accordingly.

### Conclusion:

In summary, the provided code defines a WordPress class that adds custom fields to user profiles, allowing users to input and save additional information. The fields are displayed on the user profile page, and the entered data is stored securely in the user meta. This functionality can be useful for websites that require specific user details beyond the default WordPress profile fields.