Я хочу обновить свою таблицу метаданных пользователя.

Вопрос или проблема

У меня есть форма с полями name, address, class и age. Когда я вношу новую запись, поле имени обновляется в таблице wp_users.

После сохранения ID я пытаюсь обновить пользовательские мета-поля, такие как address, но это не происходит. Ниже мой PHP код. Пожалуйста, помогите мне:

<?php
$userdata = array(
    'user_login'  => $_POST['usname'],
    'user_pass'   => $_POST['passw'] // При создании пользователя ожидается `user_pass`.
);

$user_id = wp_insert_user( $userdata ) ;

//При успешном выполнении
if ( ! is_wp_error( $user_id ) ) {
    echo "Пользователь создан: ". $user_id;
}

    if(isset($_REQUEST['r_submit']))
    {
        $id = $_GET['ID'];

        $user_id = $id;

        $meta_key   = "address";

        $meta_value = $_REQUEST['address'];

        update_user_meta( $user_id, $meta_key, $meta_value );
    }

?>

изменение кода, как показано ниже, дало мне ответ:

$userdata = array(
    'user_login'  => $_POST['usname'],
    'user_pass'   => $_POST['passw'] // При создании пользователя ожидается `user_pass`.
);

$user_id = wp_insert_user( $userdata ) ;

update_user_meta( $user_id, 'address', $_REQUEST['address'] );
update_user_meta( $user_id, 'age', $_REQUEST['age']);
update_user_meta( $user_id, 'class', $_REQUEST['class']);

//При успешном выполнении
if ( ! is_wp_error( $user_id ) ) {
    echo "Пользователь создан: ". $user_id;
}

Ответ или решение

Обновление таблицы метаданных пользователей в WordPress может оказаться не самым тривиальным процессом, особенно если возникают проблемы с нестабильной работой функции или некорректной передачей данных. Давайте рассмотрим, как можно эффективно и надежно решить задачу обновления метаданных пользователя, используя PHP-код.

Теоретическая часть

Система управления контентом WordPress очень гибкая и предоставляет разработчикам возможность управлять пользователями и их метаданными с помощью встроенных функций. Функции wp_insert_user и update_user_meta являются ключевыми механизмами для работы с пользователями.

wp_insert_user — эта функция используется для создания нового пользователя в WordPress. Она принимает массив параметров нового пользователя, таких как user_login и user_pass, и возвращает ID новосозданного пользователя или объект ошибки WP_Error в случае неудачи. Обратите внимание, что поле user_pass является обязательным для создания нового пользователя.

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

Пример кода

Давайте разберем пример кода, который демонстрирует создание пользователя и обновление его метаданных.

$userdata = array(
    'user_login'  => $_POST['usname'],
    'user_pass'   => $_POST['passw'] // При создании пользователя необходимо указать `user_pass`.
);

$user_id = wp_insert_user($userdata);

// Обновление метаданных пользователя
if (!is_wp_error($user_id)) {
    update_user_meta($user_id, 'address', $_REQUEST['address']);
    update_user_meta($user_id, 'age', $_REQUEST['age']);
    update_user_meta($user_id, 'class', $_REQUEST['class']);
    echo "User created: " . $user_id;
} else {
    echo "Error: " . $user_id->get_error_message();
}

Практическая реализация

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

Как это работает:

  • Создание пользователя: Сначала мы создаём нового пользователя с помощью функции wp_insert_user, передавая ей необходимые параметры из формы. Пользователь создается в базе данных, и функция возвращает идентификатор нового пользователя.

  • Проверка успешности: Мы проверяем, была ли создана запись. Для этого используется is_wp_error(), чтобы убедиться, что wp_insert_user не вернул ошибку.

  • Обновление метаданных: Используя возвращенный ID пользователя, с помощью update_user_meta обновляются поля метаданных: адрес, возраст и класс.

Советы по улучшению кода

  1. Безопасность данных: Используйте функции очистки данных (sanitize_text_field, esc_sql) для обработки входных данных из массивов $_POST и $_REQUEST, чтобы защиту от XSS-атак и SQL-инъекций. Например:

    $user_login = sanitize_text_field($_POST['usname']);
    $user_pass = sanitize_text_field($_POST['passw']);
  2. Обработка ошибок: Всесторонняя обработка ошибок увеличивает устойчивость кода. Вы можете предоставить пользователю более детальную информацию о причинах возможных сбоев, записывая ошибки в лог-файл или предлагая инструкцию для дальнейших действий.

  3. Чтение метаданных: Проверьте, требуется ли обновление каждого поля. Функция get_user_meta может быть полезной для сравнения текущих значений, прежде чем совершать обновление, что сократит количество ненужных операций.

  4. Кросс-сайт безопасность: Убедитесь в правильности политики использования nonce для защиты от CSRF-атак при отправке форм.

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

Оцените материал
Добавить комментарий

Капча загружается...