首页 > WP教程 > 正文

wordpress默认的注册使用的邮箱发送密码的形式,注册的时候还无法直接填写密码和昵称,这就给用户照成很多不便,那么,前台注册页面就有了需求,本站就自定义用户注册页面,当然也有很多插件可以实现,但是css样式还是需要自定义,为了方便,也为了减少系统的插件,还是有许多站长喜欢能不用插件就不用插件的。

实现自定义注册页面分为以下几个步骤:

1、在主题目录下面新建register.php页面模板,内容如下

<?php
//下面这一句是必须的,表示当前模板的名称
/*Template Name: Register*/
	
//如果用户已经登陆那么跳转到首页
if (is_user_logged_in()){
  //重定向浏览器
  wp_safe_redirect( get_option('home') );
  //确保重定向后,后续代码不会被执行
  exit;
}
	
//获取注册页面提交时候的表单数据
$redirect_to = sanitize_user( $_REQUEST['redirect_to'] );
if( !empty($_POST['csyor_reg']) ) {
  $error = '';
  $sanitized_user_login = sanitize_user( $_POST['user_login'] );
  $user_website = sanitize_user( $_POST['website'] );
  $user_description = sanitize_user( $_POST['description'] );
  $user_nickname = sanitize_user( $_POST['nickname'] );
  $user_email = apply_filters( 'user_registration_email', $_POST['user_email'] );
  $comment_aaa      	  = ( isset($_POST['aaa']) ) ? trim($_POST['aaa']) : '0';
  $comment_bbb          = ( isset($_POST['bbb']) ) ? trim($_POST['bbb']) : '0';
  $comment_subab        = ( isset($_POST['subab']) ) ? trim($_POST['subab']) : '0';
	
  // 验证邮箱
  if ( $user_email == '' ) {
    $error .= '<p><strong>错误</strong>:请填写电子邮件地址。</p>';
  } elseif ( ! is_email( $user_email ) ) {
    $error .= '<p><strong>错误</strong>:电子邮件地址不正确。</p>';
    $user_email = '';
  } elseif ( email_exists( $user_email ) ) {
    $error .= '<p><strong>错误</strong>:该电子邮件地址已经被注册,请换一个。</p>';
  }
	
  // 验证用户名
  elseif ( $sanitized_user_login == '' ) {
    $error .= '<p><strong>错误</strong>:请输入登陆账号。</p>';
  } elseif ( !preg_match("/^[a-zA-Z0-9_]{6,16}$/",$sanitized_user_login) ) {
    $error .= '<p><strong>错误</strong>:登陆账号只能包含字母、数字、下划线,长度6到16位。</p>';
    $sanitized_user_login = '';
  } elseif ( username_exists( $sanitized_user_login ) ) {
    $error .= '<p><strong>错误</strong>:该用户名已被注册,请再选择一个。</p>';
  }
	
  //验证密码
  elseif(strlen($_POST['user_pass']) < 6){
    $error .= '<p><strong>错误</strong>:密码长度至少6位。</p>';
  }elseif($_POST['user_pass'] != $_POST['user_pass2']){
    $error .= '<p><strong>错误</strong>:两次输入的密码必须一致。</p>';
  }elseif(((int)$comment_subab)!=(((int)$comment_aaa)+((int)$comment_bbb))){
    $error .= '<p><strong>错误</strong>:请输入正确的验证数字。</p>';	
  }
	
  if($error == '') {
    //验证全部通过进入注册信息添加
    $display_name = empty($user_nickname)?$sanitized_user_login:$user_nickname;
    $user_pass = $_POST['user_pass'];
    $user_id = wp_insert_user( array ( 
      'user_login' => $sanitized_user_login, 
      'user_pass' => $user_pass , 
      'nickname' => $user_nickname,
      'display_name' => $display_name, 
      'user_email' => $user_email, 
      'user_url' => $user_website,
      'description' => $user_description) ) ;
		
    //意外情况判断,添加失败
    if ( ! $user_id ) {
      $error .= sprintf( '<p><strong>错误</strong>:无法完成您的注册请求... 请联系<a href="mailto:%s">管理员</a>!</p>', get_option( 'admin_email' ) );
    }else if (!is_user_logged_in()) {
      //注册成功发送邮件通知用户
      $to = $user_email;
      $subject = '您在 [' . get_option("blogname") . '] 的注册已经成功';
      $message = '<div style="background-color:#eef2fa; border:1px solid #d8e3e8; color:#111; padding:0 15px; -moz-border-radius:5px; -webkit-border-radius:5px; -khtml-border-radius:5px; border-radius:5px;">
        <p>' . $user_nickname . ', 您好!</p>
        <p>感谢您在 [' . get_option("blogname") . '] 注册用户~</p>
        <p>你的注册信息如下:<br />
        账号:'. $sanitized_user_login . '<br />
        邮箱:'. $user_email . '<br />
        密码:'. $_POST['user_pass'] . '<br />
        </p>
        <p>欢迎光临 <a href="' . get_option('home') . '">' . get_option('blogname') . '</a>。</p>
	<p>(此郵件由系統自動發出, 請勿回覆.)</p>
	</div>';
      $from = "From: "" . get_option('blogname') . "" <$wp_email>";
      $headers = "$from\nContent-Type: text/html; charset=" . get_option('blog_charset') . "\n";
      wp_mail( $to, $subject, $message, $headers );
			
      $user = get_userdatabylogin($sanitized_user_login);
      $user_id = $user->ID;
			
      // 自动登录
      wp_set_current_user($user_id, $user_login);
      wp_set_auth_cookie($user_id);
      do_action('wp_login', $user_login);
			
      wp_safe_redirect( $redirect_to );
    }
  }
}	
?>
	
<!--下面部分是页面显示部分-->
<?php get_header(); ?>
<div id="roll">
  <div title="回到顶部" id="roll_top"></div><div title="查看评论" id="ct"></div><div title="转到底部" id="fall"></div>
</div>
<div id="content">
  <div class="main">
    <div id="mapsite">当前位置: <a title="返回首页" href="<?php echo get_settings('Home'); ?>/">首页</a> &gt; <?php the_title(); ?></div>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="left left_page">
    <h2><?php the_title(); ?></h2>
    <div class="article article_page">
      <div class="context">
	<?php the_content('Read more...'); ?>
	
	<?php if(!empty($error)) {
	  //输出错误提示信息
	  echo '<p>'.$error.'</p>';
	}
	if (!is_user_logged_in()) { ?>
	<form name="registerform" method="post" action="#">
	<p>
	<label for="user_email">电子邮箱:
	<input class="input" type="text" name="user_email" id="user_email" tabIndex="1" class="input" size="25" value="<?php if(!empty($user_email)) echo $user_email; ?>"/>
	</label> * 请正确输入电子邮箱,例:admin@csyor.com。
	</p>
	
	<p>
	<label for="user_login">登陆账号:
	<input class="input" type="text" name="user_login" id="user_login" tabIndex="2" class="input" size="25" value="<?php if(!empty($sanitized_user_login)) echo $sanitized_user_login; ?>"/>
	</label> * 登陆账号只能包含字母、数字、下划线,长度5到16位。
	</p>
	
	<p>
	<label for="user_pwd1">密  码:
	<input class="input" id="user_pwd1" class="input" type="password" tabindex="3" size="25"  name="user_pass" />
	</label> * 请输入大于6位字符的密码。
	</p>
	
	<p>
	<label for="user_pwd2">重复密码:
	<input class="input" id="user_pwd2" class="input" type="password" tabindex="4" size="25"  name="user_pass2" />
	</label> * 请再次输入密码,并且确保两次输入密码一致。
	</p>
	
	<p>
	<label for="nickname">昵  称:
	<input class="input" id="nickname" class="input" type="text" tabindex="5" size="25"  name="nickname" />
	</label>  请在此输入您的显示昵称。
	</p>
	<p>
	<label for="website">站  点:
	<input class="input" id="website" class="input" type="text" tabindex="6" size="25"  name="website" />
	</label>  请在此输入您的站点的网址。
	</p>
	
	<p>
	<label for="description">个人说明:
	<textarea class="input" id="description" name="description" rows="7" cols="20"></textarea>
	</label>  请在此输入您的个人说明。
	</p>
	
	<p>
	<label for="subab"><?php $aaa=rand(0,9); $bbb=rand(1,9); ?>验  证:
	<input class="input" type="text" name="subab" id="subab" size="25" tabindex="8" />
	</label> * (<span style="color:#FF0000;"><?php echo $aaa; ?>+<?php echo $bbb; ?>=?</span>) 请输入计算结果。
	</p>
	<input name="aaa" value="<?php echo $aaa; ?>" type="hidden" />
	<input name="bbb" value="<?php echo $bbb; ?>" type="hidden" />
	
	<p class="submit" align="center">
	<input type="submit" name="wp-submit" id="wp-submit" class="button" class="button button-primary button-large" tabindex="7" value="用户注册" />
	<input type="hidden" name="csyor_reg" value="ok" />
	<input type="hidden" name="redirect_to" value="<?php echo $redirect_to; ?>"/>
	</p>
	</form>
	<?php 
         } else {
	   echo '<p>您已注册成功,并已登录!</p>';
	 }
	?>
      </div>
    </div>
  </div>

  <!--此页面不需要评论,屏蔽掉
  <div class="articles articles_page">
    <?php /*comments_template(); */?>
  </div>
  -->

  <?php endwhile; else: ?>
  <?php endif; ?>
</div>
	
<?php get_sidebar(); ?>
<?php get_footer(); ?>

2、后台新建页面,选择第一步新建的模板

3、把新创建的页面模板的链接放在相应的位置

关键就在第一步上,第二、三步的能看懂第一步的你一定能够自己实现的。以上就是本站实现前台注册页面的步骤,希望能给您帮助。此方法本站已经在使用,欢迎浏览讨论!

以上内容来自于网络,如有侵权联系即删除。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息

Sun回复2016-12-24 23:16

博主你好,我按照你的做法实现注册功能模块,但点击注册按钮时出现“无法找到该网页”,要怎么解决呀,PS:初学者,我要做网站作为毕业设计,求帮帮忙,拜托拜托!

重庆SEO回复2014-07-30 16:27

很不错的文章,支持非插件功能!

    重庆SEO2014-07-30 17:14

    有了注册功能 还有登陆功能有吗

    Csyor2014-07-31 09:14

    登陆功能有的,回头放出来,请关注

    Csyor2014-07-31 10:16

    登陆功能教程地址:https://www.csyor.com/931.html

    龙笑天2016-11-12 16:43

    有了登录和注册,有找回密码教程吗?期待啊,博主!

流浪汉回复2014-05-02 09:56

如果要保证昵称也唯一,应该怎么写呢?

    Csyor2014-05-02 18:38

    可以在function.php文件中自定义一个检验用户昵称是否存在的函数,然后在页面中调用判断即可

    龙笑天2016-11-12 16:29

    此函数怎么写呢?

No.16大街回复2014-01-27 11:36

很好用,希望以后多写类似教程

    Csyor2014-01-27 12:09

    :razz: 这是肯定的,不过得等年后喽

laiydesign回复2014-01-06 14:11

不对啊,提交时并不会提示错啊

    Csyor2014-01-06 14:13

    你可以试一下我的站点,看看会不会提示错误

    laiydesign2014-01-06 14:20

    嗯,你这个不错啊,非常的好,怎么弄的呀?我这就不行啊?请指教哈,有QQ吗?

    Csyor2014-01-06 14:22

    联系方式网站底部“Q我”

流浪人回复2014-01-03 22:06

挺好的实现方法,就喜欢不用插件的方法

    Csyor2014-01-03 22:08

    谢谢,希望多多关注本站