Статьи

Добавить пользовательские поля пользователя на страницу профиля пользователя

В предыдущей статье я объяснил, как можно изменить контактную информацию на странице профиля пользователя WordPress , но что делать, если вы хотите узнать больше пользовательской информации от пользователя, которая требует больше, чем просто текстовое поле.

В этом уроке мы рассмотрим, как мы можем добавлять новые поля на страницу профиля пользователя, чтобы собирать пользовательскую информацию, которая требует раскрывающегося списка или флажка.

В этом уроке нам нужно использовать 4 действия WordPress:

  • show_user_profile — используется на странице «Ваш профиль».
  • edit_user_profile — используется на странице «Редактирование пользователя».
  • personal_options_update — запускается при загрузке страницы страницы «Ваш профиль», используется для обработки отправки формы.
  • edit_user_profile_update — запускается при загрузке страницы страницы «Редактировать пользователя», используется для обработки отправки формы.

В этом руководстве мы собираемся использовать ООП и создать класс PHP, который будет обрабатывать эту настройку. При работе с ООП с WordPress рекомендуется размещать функции add_action () или add_filter () в конструкторе класса.

class Add_New_User_Profile_Fields
{
    public function __construct()
    {
        // add actions for the profile customisation
        add_action( 'personal_options_update', array($this, 'update_custom_profile_fields') );
        add_action( 'edit_user_profile_update', array($this, 'update_custom_profile_fields') );

        add_action('show_user_profile', array($this, 'add_custom_profile_fields'));
        add_action('edit_user_profile', array($this, 'add_custom_profile_fields'));
    }

    /**
     * Add new custom fields to the profile page
     *
     * @param $profileuser
     */
    public function add_custom_profile_fields( $profileuser )
    {
        // add new custom profile fields
    }

    /**
     * Update new fields on the user profile page
     *
     * @param $user_id
     */
    public function update_custom_profile( $user_id )
    {
        // code to validate and update the user data
    }
}

Чтобы использовать это на своем сайте, вы можете либо превратить его в плагин, либо включить файл из вашей темы functions.php и создать экземпляр класса.

Добавить новые поля на страницу профиля

Чтобы добавить новые поля на страницы профиля, нам нужно использовать действия show_user_profile и edit_user_profile, которые будут запускать одну и ту же функцию add_custom_profile_fields . Отсюда мы можем просто добавить любой HTML-код, который хотим создать, в новые поля формы.

/**
     * Add new custom fields to the profile page
     *
     * @param $profileuser
     */
    public function add_custom_profile_fields( $profileuser )
    {
        $customData = get_user_meta( $profileuser->ID, 'custom_user_fields', true );
        ?>
        <h2><?php _e('Custom User Profile Fields'); ?></h2>
        <table class="form-table">
            <tr>
                <th><label for="custom_user_fields_textbox"><?php _e('Custom Textbox'); ?></label></th>
                <td><input type="text" name="custom_user_fields_textbox" id="custom_textbox" value="<?php echo if(isset($customData['textbox'])){ echo esc_attr($customData['textbox']); } ?>" class="regular-text" /></td>
            </tr>

            <tr>
                <th><label for="custom_user_fields_select"><?php _e('Custom Select'); ?></label></th>
                <td>
                    <select name="custom_user_fields_select" id="custom_select">
                        <option value="">Please Select</option>
                        <option value="1" <?php if(isset($customData['select'])){ selected($customData['select'], 1); } ?>>Select Value 1</option>
                        <option value="2" <?php if(isset($customData['select'])){ selected($customData['select'], 2); } ?>>Select Value 2</option>
                        <option value="3" <?php if(isset($customData['select'])){ selected($customData['select'], 3); } ?>>Select Value 3</option>
                        <option value="4" <?php if(isset($customData['select'])){ selected($customData['select'], 4); } ?>>Select Value 4</option>
                        <option value="5" <?php if(isset($customData['select'])){ selected($customData['select'], 5); } ?>>Select Value 5</option>
                    </select>
                </td>
            </tr>

            <tr>
                <th><label for="custom_user_fields_checkbox"><?php _e('Custom Checkbox'); ?></label></th>
                <td><input type="checkbox" name="custom_user_fields_checkbox" id="custom_checkbox" value="1" <?php if(isset($customData['checkbox'])){ checked($customData['checkbox'], 1); } ?>/></td>
            </tr>
        </table>
    <?php
    }

Сначала мы начнем с получения текущих значений в базе данных для пользователя. Как и сообщения, WordPress позволяет хранить дополнительную информацию для пользователей приложения, это называется мета пользователя . Когда мы сохраняем данные, нам нужно сохранить их в метаинформации пользователя. Поэтому мы собираемся использовать функцию get_user_meta () для получения пользовательских полей, которые мы создаем. Это вернет массив данных настраиваемого поля из базы данных, мы будем использовать эти данные для заполнения формы.

Далее в этом коде мы просто создаем поля формы в HTML всей необходимой нам информации.

С этим кодом в вашем классе вы сможете перейти на страницу профиля и увидеть новые поля в нижней части страницы профиля.

Сохранить поля профиля

Теперь, когда поля отображаются на странице профиля пользователя, нам нужно обработать эту информацию и сохранить ее в метаинформации пользователя.

На кнопке сохранения на странице профиля она отправляет форму обратно в себя и обрабатывает значения, поэтому мы можем подключиться к действиям personal_options_update и edit_user_profile_update для обработки новых полей пользователя.

Приведенный ниже код проверит, было ли опубликовано поле формы, затем очистит входные данные и сохранит значение в массиве. После обработки всех полей в этом массиве мы можем взять эту переменную и сохранить ее в пользовательской мета- функции с помощью функции update_user_meta () .

/**
     * Update new fields on the user profile page
     *
     * @param $user_id
     */
    public function update_custom_profile( $user_id )
    {
        $userData = array();

        if(!empty( $_POST['custom_user_fields_textbox'] ))
        {
            $userData['textbox'] = sanitize_text_field( $_POST['custom_user_fields_textbox'] );
        }

        if(!empty( $_POST['custom_user_fields_select'] ))
        {
            $userData['select'] = sanitize_text_field( $_POST['custom_user_fields_select'] );
        }

        if(!empty( $_POST['custom_user_fields_checkbox'] ))
        {
            $userData['checkbox'] = intval( $_POST['custom_user_fields_checkbox'] );
        }

        if(!empty($userData))
        {
            update_user_meta( $user_id, 'custom_user_fields', $userData);
        }
    }

Вот и все, теперь вы можете создавать настраиваемые поля формы и сохранять их в соответствии с пользовательской мета-областью для использования в других местах вашего сайта.