是否强制用户在注册后填写其个人资料?如何

时间:2012-04-19 作者:fritids

我正在我的wordpress网站上创建一个自定义(快速)注册页面,让用户只需填写用户名电子邮件并选择密码即可快速注册。

我有tpl-edit-profile.php,

我需要实现的是在用户注册到该页面后重定向用户(tpl-edit-profile.php)

注册不需要激活

然后,用户必须填写并完成所有配置文件数据,然后才能重定向到站点的其余部分。换句话说,如果他们没有完成个人资料信息,他们就无法继续使用该网站,因此所有操作都将遵循tpl-edit-profile.php.当他们完成配置文件信息后,他们可以访问和使用整个网站。

非常感谢。

1 个回复
最合适的回答,由SO网友:Eric Allen 整理而成

您应该钩住user\\u register操作。

我在最近的一个网站上做了类似的事情(不需要填写个人资料字段,但需要更新会员资格)。

我将提出一个由多个部分组成的解决方案(如果其中任何一个问题令人困惑,请告诉我,这是漫长的一天,我可能无法完美地解释)。

EDIT: 进一步考虑之后,我建议您将该PHP文件转换为模板,并将其设置为页面。这将使Wordpress更容易在那里重定向用户。(为了实现下面的代码,假设您将其设置为/registration-step-2/)

首先,在user\\u register挂钩上添加一个操作,在该挂钩上使用wp\\u 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\\u 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\\u登录(检查登录的用户是否有您的自定义meta选项或功能)和您可能还想在pre\\u get\\u帖子中添加类似的检查(这样,如果用户尚未完成注册,无论何时尝试导航,都会提示他们)。

类似于:

//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\\u get\\u posts操作上为is\\u user\\u logged\\u in(),并且他们具有您的自定义元选项或功能。

明天我在办公室的时候,我可以试着提供一些代码,但如果你对WordPress的操作相当熟悉,你应该会没事的。

另外,作为补充说明,我将使其成为一个简单的功能插件,这样您就不必担心要复制函数。php的东西,如果你在路上切换主题。

但是,为了确保他们实际填写,我还将在他们填写完后设置一个用户功能或自定义user\\u meta选项,以便您可以告诉系统他们已经完成了。

EDIT: 如果您使用的是GravityForms,请告诉我,因为您可能希望根据它们的触发顺序挂接到不同的操作。Gravity Forms action gform\\u user\\u registered在user\\u register函数之后激发,并包括您附加到的特定表单中的所有数据,这使您能够更灵活地处理表单和根据表单更改用户。

EDIT 2: 我添加了代码,以便更好地表达我所说的内容。如果您需要任何澄清或解释,请告诉我。很明显,它需要一些调整来适应您的代码,但是如果您只需调整重定向上的页面名称,我包含的函数应该可以很好地为您服务。

UPDATE BY FRITIDS :

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


           }

      }

 }

}

结束

相关推荐

Track logged in users' visits

是否有方法跟踪登录的用户活动?我想看看谁每天都登录到这个网站,也许还能看到特定的人的登录历史。目前我不知道哪些注册用户正在访问我的网站。这是一个私人家庭网站~20 members 我只是想知道谁在使用它,谁没有使用它。