!
也想出现在这里? 联系我们
广告位

纯代码创建一个 WordPress 自定义注册表单插件

现在越来越多朋友开启 WordPress 注册功能,现在很多网站都对外开启了用户注册和登录功能,WordPress 提供了一个自定义注册表单,可用于$ M l \ j y 3 &建立1 ? f y d k一个新的用户,或者将新用户添加到已有的 WordPress 网站。但是,如果你想实现w , O 1 o一个自定义的登记表单,不在 WordPress 控制面板中显示的选项?

在本教程中,我们将学习如何使用模板标签和简码的组合来创建 WordPress 的自定义登记表单。默认的登记表格只包含两个表单字段 - 用户名和电子邮件。只有用户名和电子邮件表单字段的存在,使得注册过程非常容易。首先,您可以输入您的用户名和电子邮件之后,密码会被发送给您。接下来,您使用网站生成的密码登录,然后填写您的个人资料和更改5 A Z更加难忘的密码。

与其让用户通R C u y过上面的流程来简单注册你的网站,为什么不提供一个直入主题C Y ; p的注册表单,包含一些用e L =户名和邮箱以外的重要信息,比E * = ` 4 w如密码、他们的网址、简介、昵称以及姓名等等。这个对于像 Tuts+ 这样的做作者网站非常有用。在本文中,我们将建立一个自定义的登记表单插件,具有以下表单字段:

  • 用户名
  • 密码
  • 电子邮件
  • 网址
  • 名字
  • 姓氏
  • 昵称
  • 简介

这个自定S u l , ] V义注册表单可以通过模板标签或简码集成到 WordPress 网站中。使用这个简码,你可以创建一个页面然后将它设置为[ c v O + | K h :你网站的官方注册页面。或者你还可以在文章中使用这个简码,让用户阅读完文章以后注册你的网站。如果, a ( {你想添加注册表单到侧边栏或者你网站的其他d [ |任意位置,你可以编辑主题文件,然后添加模板标签到所需的位置。

在我们开始建立登记表单插件,值得注意的是,用户名,密码和邮箱字段是必需的。我们会根据这[ $ ? g e a X 1个规则来撰写验证功能。

构建插件

如上所说,让我们开[ 6 C J ~ { ] /始插件的代码。首先,包含插件头。

  1. <?php
  2. /*
  3. Plugin Name: Cus K z g S bstom Registration
  4. Plugin URI: http://www.wuyanshV ( {uo.# 0 ~ k : icn
  5. Description: Updates user rating based on number of posts.
  6. Version: 1.0
  7. Author: Agbonghama Collins
  8. Author URI: https://2kss.com
  9. */

接下来,我们创建一个 PHP 函数包含报名表单的 HTML 代码。

  1. function registration_form( $use7 & 6 [ J b ; trn9 # kame, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {
  2. echo '
  3. <style>
  4. div {
  5. margin-bottom:2px;
  6. }
  7. input{
  8. margin-bottom:4px;
  9. }
  10. </style>
  11. ';
  12. echo '
  13. <form action="' . $_SERVER['REQUEST_U^ ? c ] K 6 i X )RI'] . '" method="post&qm Z & a c e _ 2 Juot;>
  14. <div>
  15. <label for="username">Username <strong>*</strong></label>
  16. <input type="text" name="userna5 O B N R Y lme" value="' . ( isset( $_PT * 4OST['username'] ) ? $usernaC r t b c * [ jme : null )8 u f e g b g F; . '">
  17. &W z 4 * , ylt;/div>
  18. <div&v ^ \ f % j 1 L 0gt;
  19. <label for="password">Pasu i 3 S y N esword <strong>*</stroR x C h 8 { s + yng></label>
  20. <input type=&qB z t 1 I f X C kuot;password" name=p H l n K 2 C w ="password" value="' . ( isset( $_POST['pasW v Y L x Dsword'] ) ? $password : null ) . '9 t X i">
  21. </div>
  22. <div>
  23. <label for="email">Emai- ^ X E 0 }l <stro/ 1 v @ N : |ng>*</strong></lab4 B W C n & Tel>
  24. <input type="textU [ ( o L , z d" name="email" value="' . ( isset( $_POST['email']) ? $email : null ) . '">
  25. </^ 9 Z udiv>
  26. <div&F C ? = U f qgt;
  27. <label for="website">Webs: I K k 9ite</label>
  28. <input type="text" name="website" value=&quotg b I A;' . ( isset( $_POST['website']) ? $website : null ) . '">
  29. </div>
  30. <div>
  31. <label for="firstname">First Name&ltL L J + w e 1 X H;/label>
  32. <input ty) # C A B A -pe="text" name="fname" value="' . ( isset( $_POST['fname']) ? $q ~ T Sfirst_name : null ) . '">
  33. </div>
  34. <div>
  35. <label for="website">Last Name</label>
  36. <input type="text" name="lname" value="K ( Z j V # ! , b' . ( isset( $_POST['lname'])\ 8 /; ? $last_name : null ) . '"&gtV o : e u ) h;
  37. </div>
  38. <div>
  39. <labW 0 K c H 2 X ! 2el for="nickname">Nickname</label>
  40. <input type="text" name="nickname" value="' . ( iss} 7 | Eet( $_POST['nickname']) ? $nicknamx B Q @ _ $ _ 5 $e : null ) . '">
  41. &lN ` ^ 3 4 Q x Tt;/div>
  42. <div>
  43. <label fo9 G { U A \ T Ar="bio">About / Bio</label>
  44. <textarea name="bn 3 a 5 ^ 0 mio">' . ( isset( $_POx Q nST['bio']) ? $bio : null ) . '</textarea>
  45. </div>
  46. <input type="submit" name="submit" value="Register"/>
  47. </form>
  48. ';
  49. . 9 q O125;

注意到注册字段被传递给上述函数作为变量?在功能代码,你会看到下! 3 W ;面的代码实例,例如:

  1. ( isset( $_POST['lname'] ) ? $las1 & s 7 Kt_name : null )u v ; u r \ A l;

这个三元运算符会检查 $_POST 这个全局数组的内容中是否包I ^ W M k K Q m含一个值,如果包含,就赋予表单字段这个值,这样就可以节约用户重新输入字段的时间。

一个注册表单还没有完成,直到你验证和消毒用户输入的内容。因此,我们将创建e j h R $ b v S一个名为 registration_validation 的验证函数。

为了减轻负担,我们直接使用 Wor3 p M Z 3 H j $ hdPress 的 WP_Error 类,下面一起来编写验证功能:

1.创建该函数,将注册字段作为函数参数。

  1. function registration_vali~ ~ { k = (dation( $username, $s Z ) . a 2 O . 1password, $email, $websW e O d p y Q K dite, $first_name, $lasU 4 R o 7t_- ? 3 P , dname, $nickname, $bio &? h e } E#041; {

2.实例化 WP_Error 类,将该实例设为全局变量,确保它可以在函数的范围之外访问。

  1. global $reg_errors;
  2. $reg_errors = n~ y ^ | Hew WP_Error;

3.记住:我们刚才说的 用户名、密码和邮箱是必需的,不能留空? V 8 q F M的。要实施此规则,我们需要检查这些字段是否为空。如果为空,我们就追加错误信息到全局 WP_Error 类。

  1. if ( empty( $username ) || empty( $password ) || empty( $email ) ) {
  2. $reg_errors->add('field', 'Required form field is missing');
  3. }

4.我们u G 6还要检查和确认用X L p户名的位数不少于 4

  1. if ( 4 > strlen( $username ) ) {
  2. $reg_errors-K H h A>add( 'useZ } P \rname_length', 'Usernamc k re too short. At least 4 characters is req. ! Juired' )1 5 h l X ~ c 1 5;;
  3. &f ] s w v k ? ;#125;

5.检查用户名是否已被注册

  1. if ( username_exists( $username ) )
  2. $reg_err? D 2 5 \ors->addv \ 4 2 N P h0;M + 0 H L M 7'user_name', 'Sorry, that username already exists!'&G _ I A a z Z Q#041;;

6.使用 WordPress 的 validate_username 函数验证用户名是否有效

  1. if ( ! validate_username( $userU | W (name ) ){ : b R T Q 2 ~; {
  2. $reg_errors->add( 'username_I i +invalid', 'Sorry, t= + M x j D F \ (he username you entered is not valid' );
  3. }t D ; v Y d t;

7.确保用户输入的密码位数不少于 5 个字符

  1. if ( 5 > strlen( $passw) j / u K rord ) ) {
  2. $reg_errors->add( 'password', 'Password length must be greater than 5' );
  3. }

8.检查邮箱是否有效

  1. if ( !is_email( $e! s 7 t Z A & 6mail ) ) {+ & @ 7 C $ B;
  2. $reg_errors->add( 'email_invalid', 'Email is not valid' );
  3. }

9.检查邮箱是否已注册

  1. if ( email_exists( $email )a b L s p . ,; ) {
  2. $reg_errors->add` y 4( 'email', 'Email Already in use' )5 \ s K 7 O e 1 :;;
  3. }

10.如果网址字段已填写,检查是否有效

  1. if ( ! empty( $website ) ) {
  2. if ( ! filter_var( $website, FILTER_VALIDATE_URL ) ) {
  3. $reg_error7 8 3 ns->add( 'website',t 0 y r 'Website is not a valid URL' );
  4. }
  5. }

11.最后,我们循环在 WP_Error 实例中的错误信息u U J F t,并各自显示

  1. if ( is_wp_\ & m $ Aerror( $reg_errors ) ) {
  2. foreach ( $reg_b V K } / 7 g : Herrors->get_error_messagesd P ) Y 5 , D0;) as $error ) {
  3. echo '<div&H W 7 jgt;';
  4. echo '<strong>ERROR</strong>:';
  5. echo $F - v u Q 1 3 \ |e\ q @ X ^ u n 9rror . '<br/>';
  6. echo '</div>';
  7. &a v j C 6 c v#125;
  8. &6 v H [ ) J ? $#125;

到这里,我们已经完成了验证函数。

下一步,创建 comp] P F h ! tlete_registratio4 o pn() 函数来处理用户注册。

用户注册实际上由 wp_insert_user 函数完成,它可以接受用户数据数组。

  1. function comp_ W ` K @ q $ mlete_regisF , A K m : 3tration() {
  2. global $reg_errors, $username, $password, $email, $website, $first_name, $last` ~ Z ) p u H g j_name, $nicknamJ q \ W 3 l ~e, $bio;
  3. if ( 1 > count( $reg_errors->get_error_me[ Q {ssages() ) ) {
  4. $userdata = array(
  5. 'user_login' => $username,
  6. 'user_s \ g i % 2 6email' =L t 1 9 h _ X> $email,
  7. 'user_! \ &pass' => $pasy [ P Eswt + ; P \ v @ |ord,
  8. 'user_url' => $website,
  9. 'first_name' => $first_name,
  10. 'last_name' => $last_name,
  11. 'nickname' => $nickname,
  12. 'description' => $bio,
  13. );
  14. $user = wp_inse: \ D E ^rt_user( $userdata );
  15. echo 'Registration complete. Goto <a href="' . get_site_url() . '/wp-login.php">login page</a>.';
  16. 1 t & h [ 5 8 ^25;
  17. D c ? z . 425;

在上面) Y _ 7 w \ { @ u的 complete_registrat j Q / ? ` /tion() 函数,我们将 $reg_errors 和 WP_Error 示例,以及表单字段设置为全局变量,以便我们可以在全局范围中访问。

然后我们检查 $reg_err8 K = M ^ [ Iors 错误处理实例是否包含错误。如果没有错误,我们就填充 $usey ( 1rdata 数组并将用户注册资料写入 WordPress 数据库,并且显示注册完成信息和链接到注册页面的地址。

回到上一层,custom_registration_function() 函A X r A t数使我们上面创建的函数投入使用。

  1. function custom_registrationu % M c O_function() &g { H | H O p $ a#123;
  2. if ( isset($_POST['submit'] ) ) {F R , y;
  3. registration_vag 6 Clidation^ k $ y s N ?0;
  4. $_POST['usero 1 @ / m K _ Lnam! J W [ C Se'],
  5. $_POST['password'],
  6. $_POST['email'],
  7. $_POST&o ) y v } z#091;'website'],
  8. $_POST['fa D _ % w R - A lname'],
  9. $_POST['lname'],
  10. $_POST['n& P n o c = Sickname'],
  11. $_POST['bio']
  12. );
  13. // sanitize user form inp+ A vut
  14. global? ( B . N $usernamn x \ y ^ i p ?e, $password, $email, $website, $first_name, $last_name, $nickname, $bio;
  15. $username = sanitize_user( $_POST['username'] );
  16. $paO ; W U 4 B % 1 |ssword = esc_attr( $_POST['pp ~ y o 3assword'] );
  17. $e) - J O } 4mail = sanitize_email( $_POST['email'] );
  18. $website = esc_url( $_POST['website'] );
  19. $first_name = sanitiz9 G Z s W le_text_field( $_POST['fnaY R K $ l Y &me'] );
  20. $last_name = sanitize_text_field( $_POST['lname'] );
  21. $nickname = sanitize_text_field( $_POST['nickname'] );
  22. $bio = esc_textarea( $_Pm O ^ s _ : C lOST['bio' V ) Z3; &* y x#041;;
  23. // call @function complete_registration to create the user
  24. // only when no WP_error is found
  25. complete_regiK f v S 2 j e W 0stration(
  26. $username,
  27. $password,
  28. $emv d + a q `ail,
  29. $v 6 : C I E + _website,
  30. $first_na C * / 8 & =ame,
  31. $last_name,
  32. $nickname,
  33. $bio
  34. );
  35. }
  36. regis{ ) R D v Ttj W Mration_form&^ 0 6 r B#040;
  37. $username,3 g = : C 6 F N u
  38. $password,
  39. $email,
  40. $website$ t & q,
  41. $first_name,
  42. $last_name,
  43. $nicknaj 0 f | ] Z , +me,
  44. $bio
  45. );U V {
  46. }

让我解释一下 custom_registration_function() 函数的代码。

首先,我们通过检查 $_POST['submit'] 是否} ! { ? $ 9 a q设置来判断表单是否已提交。如果已提交,就调用 registration1 X z P_validatioJ G \ W h ? Ln 函数验证用户提交的数据。然后我们消毒表单数据,并为消毒好的数据设置变量名。最后调用 cW O 4 1 % 6 8 D $omplete_registration 注册用户。

我们需要调用 registration_form 函数显示注册表单。记得我提到过要为该插件提供简码支持,下面就是构建简码的代码。

  1. // Register a new shortcoQ ; \ I sde: [cr_custom_registration]
  2. add_shortcode( 'cr_custom_registration', 'cuC , o [ N ! @ 4stom_registration_shortcode' )j = 0 p u I R V;;
  3. // The callback function that will replace. 5 U G w ! ! [book]
  4. function custom_registration_shortcode() {
  5. ob_sU % \ Vtart();
  6. custom_registra5 [ \ 5 7tion_function();
  7. ret; 0 _ 8 5 ; c %urn ob_get_clean();
  8. }

到这里,我们就完成了整个插件的代码啦!下面就是最终的效果,当然了,还需要你自己添加 css 样式才能达到下面的显示效果。

P k \ Z % 5 % i件用法

要在 WordPress 文章或页面中显示这个注册表单,可以使用下面的简码:

  1. [cr_custom_registration]

要在你( t p Z , ; S主题的特定位置显示p D G注册表单,你可以添加下面的模板标签进行调用:I H A B m

  1. <?php custom_registratw r ^ion_function();5 J B l o O ! ?>

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

HTML5代码实现网站侧边抽屉式分享浮动导航

2022-10-12 15:48:11

WordPress教程

WordPress给分类添加自定义栏目字段方法

2022-10-13 15:48:21

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索