Вопрос или проблема
Я передаю параметр 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 в процессе регистрации, облегчая анализ источников трафика или проведения маркетинговых исследований.