WordPress 网站注册的时候,一般是要把自动生成的密码发到注册邮箱的,但是这种情况不比较不人性化,不单单是操作步骤的繁琐,有时候我们服务器出现问题导致无法发送邮件的时候就失去了这个用户,甚至有的服务器都不支持发送邮件(涉及到垃圾邮件等等问题),那么我们的网站就没法被新用户注册了。
解决这个问题很简单,就是为我们的注册表单添加一项密码字段,一来快捷注册,二来也可以给用户自定义密码,符合一般网站的注册流程。
效果可参见:ImWeb 注册页面
打开编辑主题目录的 function.php 文件,加入以下代码:
// 为注册表单添加 Password 字段
<?php
add_action( 'register_form', 'sanker_show_extra_register_fields' );
function sanker_show_extra_register_fields(){ ?>
<p>
<label for="password"><?php echo __( 'Password', 'sanker' ) ?><br/>
<input id="password" class="input" type="password" size="16" maxLength="16" value="" name="password" />
</label>
</p>
<?php
}
// Password字段错误提示,字段限制
add_action( 'register_post', 'sanker_check_extra_register_fields', 10, 3 );
function sanker_check_extra_register_fields($login, $email, $errors) {
if ( strlen( $_POST['password'] ) < 6 ) {
$errors->add( 'password_too_short', "<strong>ERROR</strong>: Passwords must be at least 6 characters long" );
}
}
// 保存自定义字段Password密码到注册用户信息里
add_action( 'user_register', 'sanker_register_extra_fields', 100 );
function sanker_register_extra_fields( $user_id ){
$userdata = array();
$userdata['ID'] = $user_id;
if ( $_POST['password'] !== '' ) {
$userdata['user_pass'] = $_POST['password'];
}
$new_user_id = wp_update_user( $userdata );
}
动作钩子 register_form、register_post、user_register 的详细使用参见官网API:
Plugin API/Action Reference/register form