我遵循了本网站和互联网其他地方的指示,旨在为某些人提供注册链接,让他们注册特定的用户角色。
我要赋予的用户角色some, 但并非所有人都有一种习惯,称之为“无监控”。通过将此代码添加到我的函数中,我可以使其正常工作。php文件:
// signup stuff
add_action(\'register_form\',\'show_role_field\');
function show_role_field(){ ?>
<input id="role" type="hidden" tabindex="20" size="25" value= "<?php if (isset($_GET[\'role\'])) {echo $_GET[\'role\'];} ?>" name="role"/>
<?php
}
add_action(\'user_register\', \'register_role\');
function register_role($user_id, $password="", $meta=array()) {
$userdata = array();
$userdata[\'ID\'] = $user_id;
$userdata[\'role\'] = $_POST[\'role\'];
//only allow if user role is my_role
if ($userdata[\'role\'] == "unmonitored"){
wp_update_user($userdata);
}
}
这意味着如果有人在
www.[mywebsiteurl].com/wp-login.php?action=register&role=unmonitored 他们被赋予了“不受监控”的用户角色,这是完美的。
但问题是,如果他们输入了一个已经收到的电子邮件地址,或者输入了错误的邀请码(我使用的是一个名为Easy invitation Codes的插件),从而导致注册失败http://wordpress.org/plugins/baw-invitation-codes/) 在上显示错误www.[mywebsiteurl].com/wp-login.php?action=register - 关键&role=unmonitored 从URL中消失,用户完成注册,并为其分配默认用户角色,而不是我需要的“无监控”角色。
有人能帮我停止错误页面剥离吗&;角色=是否从URL中取消监视?
很乐意提供所需的任何代码,如果我遗漏了任何信息,我深表歉意-我对Wordpress的这方面还不是很熟悉。
最合适的回答,由SO网友:TheDeadMedic 整理而成
这是一个简单的修复方法,只需使用$_REQUEST
而不是$_GET
在您的隐藏字段中register_form
. 更重要的是,您应该在回显之前对字段进行消毒,否则您将很容易接受注射CSRF:
<?php if ( isset( $_REQUEST[\'role\'] ) ) echo esc_attr( $_REQUEST[\'role\'] ) ?>