Заставлять пользователей заполнять свой профиль после регистрации? Как


Я создаю пользовательскую (быструю) страницу регистрации на своем сайте WordPress, чтобы пользователи могли быстро зарегистрироваться, просто заполнив имя пользователя-адрес электронной почты и выбрав свой пароль.

У меня есть tpl-edit-profile.php,

Чего мне нужно добиться, так это перенаправить пользователей после их регистрации на эту страницу (tpl-edit-profile.php)

Для регистрации не требуется никакой активации.

Затем пользователи должны заполнить и заполнить все данные профиля, прежде чем их можно будет перенаправить на остальная часть сайта. Другими словами, если они не заполнят информацию о профиле, они не смогут продолжать использовать сайт, поэтому все действия должны соответствовать tpl-edit-profile.php. Когда они заполняют информацию профиля, они могут получить доступ и использовать весь сайт.

Спасибо.

Author: kaiser, 2012-04-19

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();


           }

      }

 }

}
 5
Author: Eric Allen, 2012-04-22 22:13:13