Добавьте пользовательские метаданные при регистрации на основе электронной почты пользователя.

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

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

В форме регистрации мы запрашиваем адрес электронной почты пользователя. Как только они подтвердят свою регистрацию, мы хотим получить это значение и сохранить его в пользовательском поле (уже созданном) с именем “Form_URL”, как это :
https://www.ourwebsite.com/USEREMAIL/form/

Нам нужно объединить “https://www.ourwebsite.com/” адрес электронной почты пользователя и “/form/”, и сохранить это в пользовательском поле “Form_URL” после регистрации.

Мы начали следующую функцию, но застряли :

add_action('user_register', 'add_form_link', 10, 1);

function add_form_link($user_id)
{
    $emailurl="https://www.ourwebsite.com/" . ???? . '/form/';
   add_user_meta( $user_id, 'Form_URL', $emailurl , true );

}

PS: Наш сайт на WordPress, и мы используем Gravity Forms в качестве формы регистрации.

Если это выполняется, когда вы регистрируете пользователя, то вы можете просто взять адрес электронной почты, использованный для создания пользователя, так как он содержится во втором аргументе, который передается в user_register, который представляет собой $userdata. Смотрите https://developer.wordpress.org/reference/hooks/user_register/

Обратите внимание, что чтобы предоставить вам пример, который на самом деле даст что-то используемое, я также добавил sanitize_title, который сделает результат “безопасным для URL”. Сырой адрес электронной почты не является безопасным значением для URL, так как “@” не является используемым значением.

add_action('user_register', 'add_form_link', 10, 2);

function add_form_link( $user_id, $userdata ) {
   $emailurl="https://www.ourwebsite.com/" . sanitize_title( $userdata['user_email'] ) . '/form/';
   add_user_meta( $user_id, 'Form_URL', $emailurl );

}

Чтобы сделать это более универсальным, я бы порекомендовал НЕ сохранять полный URL, а скорее все после домена. Тогда при использовании вы сможете добавлять локальный домен, используя home_url(). Иначе, если вы вставите полный URL, вы не сможете вносить изменения в сохраненное значение позже, не манипулируя самой строкой результата.

Вы можете использовать функцию wp_get_current_user(), чтобы получить объект пользователя для текущего зарегистрированного пользователя. Отсюда вы можете получить их адрес электронной почты, используя $user->user_email. Затем вы можете использовать этот адрес электронной почты, чтобы построить URL, который хотите сохранить в поле метаданных пользователя.

Вот обновленная версия вашей функции, которая должна работать:

add_action('user_register', 'add_form_link', 10, 1);

function add_form_link($user_id)
{
// Получить объект пользователя для текущего зарегистрированного пользователя
$user = wp_get_current_user();

// Построить URL, используя адрес электронной почты пользователя
$emailurl="https://www.ourwebsite.com/" . $user->user_email . '/form/';

// Добавить URL в поле метаданных пользователя
add_user_meta( $user_id, 'Form_URL', $emailurl , true );
}

Вы также можете рассмотреть возможность использования функции update_user_meta() вместо add_user_meta(), в случае если пользователь уже зарегистрирован, и вы хотите обновить значение поля метаданных пользователя, а не добавлять новое.

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

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

Пример Функции для Сохранения URL на Базе Электронной Почты

add_action('user_register', 'add_form_link', 10, 1);

function add_form_link($user_id)
{
    // Получаем объект пользователя, зарегистрированного в системе
    $user = get_userdata($user_id);

    // Проверяем, существует ли объект пользователя
    if ($user) {
        // Формируем URL, используя адрес электронной почты пользователя
        $emailurl = "https://www.ourwebsite.com/" . sanitize_title($user->user_email) . '/form/';

        // Сохраняем сгенерированный URL в метаполе пользователя
        add_user_meta($user_id, 'Form_URL', $emailurl, true);
    }
}

Разбор Кода

  1. Хук user_register: Этот хук срабатывает после успешной регистрации пользователя, что позволяет сразу же выполнять любые дополнительные действия.

  2. Функция get_userdata($user_id): Получает объект пользователя по его идентификатору, что позволяет нам манипулировать его данными, в частности, адресом электронной почты.

  3. Проверка существования объекта пользователя: Это предостережение гарантирует, что код не будет выполнен без наличия действительного объекта пользователя.

  4. Функция sanitize_title(): С помощью этой функции мы очищаем адрес электронной почты и обеспечиваем его "безопасность" для использования в URL. Это важно, поскольку символы, такие как "@" и ".", не могут быть частью URL.

  5. Функция add_user_meta(): С помощью этой функции мы сохраняем сгенерированный URL в метаполе пользователя. Параметр true указывает на то, что мы хотим добавлять метаполе только в том случае, если оно еще не существует для этого пользователя.

Рекомендации по Оптимизации

Для повышения гибкости вашего кода, рассмотрите возможность хранения не полного URL, а только его "путевого" компонента. Это упростит обновление и модификацию. Например:

$email_path = sanitize_title($user->user_email) . '/form/';
update_user_meta($user_id, 'Form_URL', $email_path);

Позже, когда это значение вам понадобится, вы сможете использовать home_url() для динамического формирования полного URL, что делает ваш код более адаптивным к изменениям домена:

$form_url = home_url(get_user_meta($user_id, 'Form_URL', true));

Заключение

Использование описанного подхода не только упростит процесс автоматизации заполнения пользовательских данных, но и повысит удобство работы с метаданными пользователей. Такой способ делает ваш код более безопасным и производительным, что в перспективе увеличит уровень пользовательского опыта на вашем сайте. Внедрив эти изменения, вы обеспечите качественное решение для вашей регистрации пользователей через Gravity Forms.

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

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