Заставлять пользователей заполнять свой профиль после регистрации? Как
Я создаю пользовательскую (быструю) страницу регистрации на своем сайте WordPress, чтобы пользователи могли быстро зарегистрироваться, просто заполнив имя пользователя-адрес электронной почты и выбрав свой пароль.
У меня есть tpl-edit-profile.php
,
Чего мне нужно добиться, так это перенаправить пользователей после их регистрации на эту страницу (
tpl-edit-profile.php
)
Для регистрации не требуется никакой активации.
Затем пользователи должны заполнить и заполнить все данные профиля, прежде чем их можно будет перенаправить на остальная часть сайта. Другими словами, если они не заполнят информацию о профиле, они не смогут продолжать использовать сайт, поэтому все действия должны соответствовать tpl-edit-profile.php
.
Когда они заполняют информацию профиля, они могут получить доступ и использовать весь сайт.
Спасибо.
1 answers
Вы должны подключиться к действию user_register.
Я сделал нечто подобное на недавнем сайте (не требующем заполнения полей профиля, но требующем продления членства).
Я предложу решение из нескольких частей (дайте мне знать, если что-то из этого сбивает с толку, это был долгий день, и я, возможно, не смогу объяснить это идеально).
РЕДАКТИРОВАТЬ: Подумав об этом дальше, я бы рекомендовал вам превратить этот PHP-файл в шаблон и также установить его в качестве страницы. Это упростит перенаправление пользователей Wordpress туда. (для приведенного ниже кода предположим, что у вас установлено значение /регистрация-шаг-2/)
Во-первых, добавьте действие на крючок user_register, куда вы перенаправляете с помощью wp_redirect ([вставьте URL страницы редактирования профиля здесь]).
Что-то вроде:
//run this when a new user registers
add_action('user_register','continue_to_registration');
//redirects user to registration form
function continue_to_registration() {
wp_redirect(get_option('siteurl') . '/registration-step-2/');
exit();
}
Во-вторых, когда пользователь завершит регистрацию, установите пользовательский параметр user_meta или добавьте возможность пользователя, моим личным предпочтением здесь будет возможность, но вы может пойти в любую сторону. Это позволит вам проверить при входе в систему, закончил ли пользователь регистрацию или нет.
Ради приведенного ниже кода давайте представим, что у вас есть переменная для отправки формы под названием $verified, и она будет установлена в значение true после успешной обработки формы.
Вам нужно будет добавить дополнительный код в часть обработки вашей формы. Что-то вроде:
//set user capability on finished registration
if($verified) {
$user_id = get_current_user_id();
$user = new WP_User($user_id);
$user->add_cap('finished_registration');
}
В-третьих, вам нужно выполнить два действия: wp_login (чтобы проверить, имеет ли вход пользователя ваш пользовательский мета-параметр или возможность), и вы, вероятно, также захотите добавить аналогичную проверку в pre_get_posts (чтобы, если пользователь не закончил регистрацию, ему будет предложено сделать это всякий раз, когда он попытается перейти куда-либо).
Что-то вроде:
//run this function when a user logs in
add_action('wp_login','check_reg');
//check if user has finished registration when logging in
function check_reg($login) {
$user = get_userdatabylogin($login);
if(!$user->has_cap('finished_registration')) {
wp_redirect(get_option('siteurl') . '/registration-step-2/');
exit();
}
}
//run this function when a user tries to load a page
add_action('pre_get_posts','check_reg_on_page');
//check if user has finished registration before loading a page
function check_reg_on_page() {
if(is_user_logged_in()) {
if(!is_page('Registration Step 2') && !is_admin()) {
$user_id = get_current_user_id();
$user = new WP_User($user_id);
if(!$user->has_cap('finished_registration')) {
wp_redirect(get_option('siteurl') . '/registration-step-2/');
exit();
}
}
}
}
Убедитесь, что в действии pre_get_posts вы проверяете is_user_logged_in(), а также что у них есть ваша пользовательская опция или возможность.
Я могу попытаться предоставить какой-нибудь код завтра, когда буду в офисе, но если вы достаточно хорошо знакомы с действиями WordPress, с вами все должно быть в порядке.
Кроме того, в качестве примечания, я бы сделал это простым функциональным плагином, чтобы вам не пришлось беспокоиться о том, чтобы не забыть скопировать functions.php материал, если вы поменяете темы в будущем.
Но, чтобы убедиться, что они действительно заполнили его, я бы также установил возможность пользователя или пользовательский параметр user_meta после того, как они его заполнили, чтобы вы могли сообщить системе, что они закончили.
РЕДАКТИРОВАТЬ: ЕСЛИ вы используете гравитационные формы, дайте мне знать, потому что вы можете захотеть подключиться к другому действию из-за порядка, в котором они срабатывают. Действие Gravity Forms gform_user_register запускается после функции user_register и включает все данные из конкретной формы, к которой вы ее прикрепляете, что позволяет вам более гибко обрабатывать форму и изменять пользователей на основе формы.
РЕДАКТИРОВАТЬ 2: Я добавил код, чтобы лучше сформулировать то, что я говорил. Дайте мне знать, если вам что-нибудь понадобится разъяснение или объяснение. Очевидно, что для этого потребуется некоторая настройка, чтобы вписаться в ваш код, но функции, которые я включил, должны сослужить вам хорошую службу, если вы просто измените имя страницы в перенаправлении.
ОБНОВЛЕНИЕ ПО ФРИТИДАМ :
//run this function when a user tries to load a page
add_action('appthemes_before_header','check_reg_on_page'); // appthemes_before_header built-in action hook for jobroller theme
//add_action('pre_get_posts','check_reg_on_page'); // causes redirections loop error with jobroller theme
//check if user has finished registration before loading a page
function check_reg_on_page() {
if(is_user_logged_in()) {
if(!is_page('Registration Step 2') && !current_user_can( 'administrator' )) {//!is_admin() is not workin replaced by !current_user_can
$user_id = get_current_user_id();
$user = new WP_User($user_id);
$redirect = get_option('siteurl') . '/registration-step-2/';
if(!$user->has_cap('finished_registration')) {
wp_safe_redirect($redirect);
exit();
}
}
}
}