您应该钩住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();
}
}
}
}