wpurok.ru wordpress WPUrok

Как изменить и обновить поля профиля пользователя в WordPress без плагинов

В WordPress по умолчанию есть стандартный набор полей профиля пользователя: имя, фамилия, никнейм, email и несколько других. Но часто возникает необходимость добавить или изменить поля профиля, чтобы хранить дополнительную информацию, например, телефон, должность, соцсети и прочее. В этой статье мы подробно разберем, как добавить новые поля в профиль пользователя, вывести их на экран редактирования, сохранить изменения и получить доступ к этим полям в шаблонах и функциях WordPress – и всё это без применения сторонних плагинов.

Почему стоит добавлять поля профиля вручную?

Использование плагинов, таких как Advanced Custom Fields или Profile Builder, конечно, упрощает задачу, но порой избыточно для небольшой доработки. Добавление полей вручную дает полный контроль, легкость и отсутствие лишних зависимостей. Кроме того, вы учитесь работать с API WordPress и понимаете, как устроена система пользователей.

Добавление новых полей в профиль пользователя

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

add_action('show_user_profile', 'wpurok_add_custom_user_profile_fields');
add_action('edit_user_profile', 'wpurok_add_custom_user_profile_fields');

function wpurok_add_custom_user_profile_fields($user) {
    ?>
    <h2>Дополнительные поля профиля</h2>
    <table class="form-table">
        <tr>
            <th><label for="phone">Телефон</label></th>
            <td>
                <input type="text" name="phone" id="phone" value="<?php echo esc_attr(get_the_author_meta('phone', $user->ID)); ?>" class="regular-text" />
                <br /><span class="description">Введите номер телефона</span>
            </td>
        </tr>
        <tr>
            <th><label for="position">Должность</label></th>
            <td>
                <input type="text" name="position" id="position" value="<?php echo esc_attr(get_the_author_meta('position', $user->ID)); ?>" class="regular-text" />
                <br /><span class="description">Введите должность пользователя</span>
            </td>
        </tr>
    </table>
    <?php
}

В данном примере мы добавляем два поля: «Телефон» и «Должность». Они будут отображаться и при просмотре своего профиля, и при редактировании других пользователей (если у вас есть права).

Сохранение новых полей профиля

Чтобы изменения сохранялись, нужно обработать POST-запрос при обновлении профиля. Для этого используем хуки personal_options_update и edit_user_profile_update. Вот пример функции сохранения:

add_action('personal_options_update', 'wpurok_save_custom_user_profile_fields');
add_action('edit_user_profile_update', 'wpurok_save_custom_user_profile_fields');

function wpurok_save_custom_user_profile_fields($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    
    if (isset($_POST['phone'])) {
        update_user_meta($user_id, 'phone', sanitize_text_field($_POST['phone']));
    }
    if (isset($_POST['position'])) {
        update_user_meta($user_id, 'position', sanitize_text_field($_POST['position']));
    }
}

Обратите внимание на проверку прав пользователя – это обязательный этап для безопасности. Используйте sanitize_text_field для очистки данных перед сохранением.

Вывод дополнительных полей в шаблонах WordPress

Чтобы вывести дополнительные данные пользователя на сайте, например, в шаблоне записи или в виджете, можно воспользоваться функцией get_user_meta. Ниже пример кода, который выводит телефон и должность автора записи:

$author_id = get_the_author_meta('ID');
$phone = get_user_meta($author_id, 'phone', true);
$position = get_user_meta($author_id, 'position', true);

if ($phone) {
    echo '<p><strong>Телефон:</strong> ' . esc_html($phone) . '</p>';
}
if ($position) {
    echo '<p><strong>Должность:</strong> ' . esc_html($position) . '</p>';
}

Такой код можно вставить в любой шаблон темы WordPress, где нужно показать дополнительные данные пользователя.

Расширение: добавление в REST API

Если вы используете REST API WordPress для мобильных приложений или SPA, полезно добавить кастомные поля профиля в ответ API. Для этого применим фильтр rest_prepare_user:

add_filter('rest_prepare_user', 'wpurok_add_custom_fields_to_rest_api', 10, 3);

function wpurok_add_custom_fields_to_rest_api($response, $user, $request) {
    $response->data['phone'] = get_user_meta($user->ID, 'phone', true);
    $response->data['position'] = get_user_meta($user->ID, 'position', true);
    return $response;
}

Теперь при запросе /wp-json/wp/v2/users/<user_id> вы получите дополнительные поля в ответе.

Полезные советы и рекомендации

  • Всегда валидируйте и очищайте данные перед сохранением с помощью функций типа sanitize_text_field или sanitize_email.
  • Для полей с определённым форматом (например, телефон) можно добавить JavaScript-валидацию на стороне клиента.
  • Если хотите, чтобы поля были доступны в профиле пользователя при регистрации – это потребует кастомизации формы регистрации, что можно сделать отдельным хуком.
  • Для удобства администраторов можно группировать поля в отдельные секции с помощью h2 и таблиц.
  • Если нужно, чтобы поля были обязательными, добавьте соответствующую проверку в функции сохранения и выведите ошибки.

Пример использования на практике

Допустим, вам нужно добавить поле «Телефон» для всех пользователей, чтобы менеджеры могли быстро связаться с авторами публикаций. Вы добавляете поле, сохраняете данные, а в шаблоне записи выводите телефон автора под его именем. Это улучшит коммуникацию и повысит удобство работы.

Если хотите использовать готовые решения, обратите внимание на Clearfy Pro — плагин для оптимизации и расширения функционала WordPress, включая работу с профилями пользователей.

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

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее