Как захватить и сохранить параметр URL в usermeta во время регистрации в MemberPress?

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

Я передаю параметр URL, т.е. source, как

https://example.com/register/membership-monthly?source=linkedin

Мне нужно получить этот параметр из URL и сохранить в usermeta для пользователя, который зарегистрируется. Я использую хук memberpress mepr-event-member-signup-completed, но похоже, что параметр не получается с помощью $_GET.

Вот мой код

add_action('mepr-event-member-signup-completed', 'add_the_details', 10, 1);
function add_the_details($membership_id){
    global $wpdb;
    $referral_table = $wpdb->prefix . 'my_table';
    $current_user = wp_get_current_user();
    if (!isset($_GET['source']) || $_GET['source']=="") {
        return;
    }
    $source = sanitize_text_field($_GET['source']);
    update_user_meta($current_user->ID, 'source', $source);

}

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

Для решения задачи сохранения параметра URL в пользовательском мета при регистрации в MemberPress, нужно понимать, как MemberPress обрабатывает события и как данные передаются в различных стадиях процесса регистрации. Давайте рассмотрим теорию, приведем пример и разберем, как можно применить полученные знания.

Теория

MemberPress — это мощный плагин для управления членскими программами на WordPress. Он предусматривает использование различных хуков и фильтров для расширения и кастомизации функциональности. В данном случае используется хук mepr-event-member-signup-completed, который генерируется, когда пользователь завершает процесс регистрации.

Ваш скрипт пытается получить значение параметра source из глобального массива $_GET. Однако, как может показаться из описания проблемы, параметр не передается в эту точку обработки. Это может быть связано с тем, что передача данных через $_GET не всегда надежна после пост-запроса, например, если процесс регистрации обрабатывается через POST-запросы и пользователь перенаправляется.

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

Пример

Рассмотрим, как передавать параметр source во время регистрации и сохранить его в usermeta, используя сессии PHP. Решение с использованием сессий может более надежно обрабатывать параметры URL-адреса, поскольку мы можем сохранить параметр до передачи управления на другие обработчики.

// Функция для инициализации сессии.
add_action('init', 'start_session', 1);
function start_session() {
    if (!session_id()) {
        session_start();
    }
}

// Функция для сохранения параметра URL в сессии.
function save_url_param_to_session() {
    if (isset($_GET['source'])) {
        $_SESSION['source'] = sanitize_text_field($_GET['source']);
    }
}
add_action('init', 'save_url_param_to_session');

// Создаем пользовательскую функцию для сохранения данных в usermeta после регистрации пользователя.
add_action('mepr-event-member-signup-completed', 'add_the_details', 10, 1);
function add_the_details($membership_id) {
    $current_user = wp_get_current_user();
    if (isset($_SESSION['source'])) {
        $source = $_SESSION['source'];
        update_user_meta($current_user->ID, 'source', $source);
        // Опционально очищаем сессионное значение после использования.
        unset($_SESSION['source']);
    }
}

Применение

Используя вышеуказанный код, мы первым делом инициируем сессию PHP в WordPress, добавляя функцию start_session и подключаясь к действию init. Этот подход позволяет сохранять параметры, переданные через URL, в сессии, что обеспечивает их доступность даже после того, как пользователь прошел процесс регистрации и был перенаправлен.

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

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

Таким образом, сессии предоставляют более надежный метод передачи параметров из URL на всех этапах взаимодействия с пользователем. Это более комплексное решение, чем использование только $_GET, и оно особенно полезно в динамических сценариях, где данные должны быть доступны на протяжении нескольких запросов HTTP и на различных уровнях обработки данных.

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

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

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