如何利用WordPress创建自定义注册表单插件,wordpress表单
来源:http://www.ido321.com/1031.html
原文:Creating a Custom WordPress Registration Form Plugin
译文:创建一个定制的WordPress插件注册表单
译者:dwqs
开门见山,WordPress提供了一个自定义的注册表单供新用户使用,或者当添加一个新用户到已经存在的WordPress站点。但是如果你想实现一个自定义的注册表单而没有显示WordPress仪表盘的选项呢?
在这篇文章中,我们将学会怎么使用标签模板和短代码模板的联合体在WordPress中创建一个自定义的注册表单。
WordPress默认的注册表单仅由两个字段组成—-用户名和邮箱。
这个仅有的用户名和邮箱表单字段使得注册速度非常的简单。首先,你输入一个用户名,然后输入邮箱,这个邮箱就是用来接收密码的。接下来,你使用邮箱接收到的密码登陆站点,并且完成个人资料,把密码修改成简单易记得。
仅仅是在站点注册,而不是让用户区经历这些压力,那为什么除了用户名和邮箱之外,不提供一个直接的、包含一些额外重要的表单字段,例如密码、个人的URL、个人简介、昵称和他们的姓名的注册表单供用户使用呢?
这对于像Tuts+的多用户网站是非常有用的。
在这篇文章中,我们将使用下列的表单字段建立一个自定义的表单注册插件:
- username
- password
- website URL
- first name
- last name
- nickname
- biography (or an about section)
这个自定义表单插件可以通过使用短代码和联系模板整合到WordPress中。
利用短代码模板,你可以在你的站点中创建一个正式的注册页面。你也可以再一篇发表的文章中是用短代码模板,这样用户就可以在阅读完你的文章之后进行注册。
如果你想添加一个注册表单在你网站侧边栏的某个具体位置,你可以对WordPress主题中仅仅期望放置标签模板的位置进行编辑,来创建需要的注册表单。
在创建之前,需要注意的是,用户名、密码和电子邮件字段是必需的。
当我们编写验证函数时,我们将强制执行这些规则。
构建插件
正如说的那样,我们开始对插件编码。首先,包含插件的头部:
<span><?php <span>/*</span> <span> Plugin Name: Custom Registration</span> <span> Plugin URI: http://code.tutsplus.com</span> <span> Description: Updates user rating based on number of posts.</span> <span> Version: 1.0</span> <span> Author: Agbonghama Collins</span> <span> Author URI: http://tech4sky.com</span> <span> */</span></span>
接下来,我们创建一个包含注册表单的HTML代码的PHP函数:
<span>function</span><span> registration_form( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) { <span>echo</span> <span>' <style> div { margin-bottom:2px; } input{ margin-bottom:4px; } </style> '</span>; <span>echo</span> <span>' <form action="'</span> . $_SERVER[<span>'REQUEST_URI'</span>] . <span>'" method="post"> <div> <label for="username">Username <strong>*</strong></label> <input type="text" name="username" value="'</span> . ( <span>isset</span>( $_POST[<span>'username'</span>] ) ? $username : <span>null</span> ) . <span>'"> </div> <div> <label for="password">Password <strong>*</strong></label> <input type="password" name="password" value="'</span> . ( <span>isset</span>( $_POST[<span>'password'</span>] ) ? $password : <span>null</span> ) . <span>'"> </div> <div> <label for="email">Email <strong>*</strong></label> <input type="text" name="email" value="'</span> . ( <span>isset</span>( $_POST[<span>'email'</span>]) ? $email : <span>null</span> ) . <span>'"> </div> <div> <label for="website">Website</label> <input type="text" name="website" value="'</span> . ( <span>isset</span>( $_POST[<span>'website'</span>]) ? $website : <span>null</span> ) . <span>'"> </div> <div> <label for="firstname">First Name</label> <input type="text" name="fname" value="'</span> . ( <span>isset</span>( $_POST[<span>'fname'</span>]) ? $first_name : <span>null</span> ) . <span>'"> </div> <div> <label for="website">Last Name</label> <input type="text" name="lname" value="'</span> . ( <span>isset</span>( $_POST[<span>'lname'</span>]) ? $last_name : <span>null</span> ) . <span>'"> </div> <div> <label for="nickname">Nickname</label> <input type="text" name="nickname" value="'</span> . ( <span>isset</span>( $_POST[<span>'nickname'</span>]) ? $nickname : <span>null</span> ) . <span>'"> </div> <div> <label for="bio">About / Bio</label> <textarea name="bio">'</span> . ( <span>isset</span>( $_POST[<span>'bio'</span>]) ? $bio : <span>null</span> ) . <span>'</textarea> </div> <input type="submit" name="submit" value="Register"/> </form> '</span>; }</span>
请注意注册字段是作为变量传递给上面的函数。在函数中,你会看到下面代码的示例:
<span>( <span>isset</span>( $_POST[<span>'lname'</span>] ) ? $last_name : <span>null</span> )</span>
这个三元操作符是检查全局变量数组$_POST是否包含数据,如果有数据,就把填充的表单字段值保存以便进入下一个字段。
除非你验证了表单数据并且清空了表单数据,一个注册表单才能算完成,否则就不算。因此,我们要创建一个名为registration_validation<span>的表单验证函数。</span>
<span>为了简化验证的”痛苦”,我们可以使用WordPress中的 <span>WP_Error</span> 类。跟着我编写验证函数:</span>
<span>1、创建函数,并将注册表单的字段值作为函数的参数传递进来</span>
<span>function</span><span> registration_validation( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {</span>
2、实例化WP_Error 类,并把实例作为全局变量,以便于我们可以再函数的作用域之外使用。
<span>global</span><span> $reg_errors; $reg_errors = <span>new</span> WP_Error;</span>
3、记住:我们说的用户名、密码和电子邮件是必填的,不要忽略了。为了执行这个规则,我们需要检查它们中任何一个是否为空。如果为空,我们就将错误信息追加给WP_Error 类的实例。
<span>if</span><span> ( <span>empty</span>( $username ) || <span>empty</span>( $password ) || <span>empty</span>( $email ) ) { $reg_errors->add(<span>'field'</span>, <span>'Required form field is missing'</span>); }</span>
4、我们也可以确保用户名的字符个数不小于4
<span>if</span><span> ( 4 > strlen( $username ) ) { $reg_errors->add( <span>'username_length'</span>, <span>'Username too short. At least 4 characters is required'</span> ); }</span>
5、检查用户名是否被注册了
<span>if</span><span> ( username_exists( $username ) ) $reg_errors->add(<span>'user_name'</span>, <span>'Sorry, that username already exists!'</span>);</span>
6、利用WordPress的validate_username函数确保用户名是可用的
<span>if</span><span> ( ! validate_username( $username ) ) { $reg_errors->add( <span>'username_invalid'</span>, <span>'Sorry, the username you entered is not valid'</span> ); }</span>
7、确保用户输入的密码的字符个数不小于5
<span>if</span><span> ( 5 > strlen( $password ) ) { $reg_errors->add( <span>'password'</span>, <span>'Password length must be greater than 5'</span> ); }</span>
8、检查电子邮件是否有效
<span>if</span><span> ( !is_email( $email ) ) { $reg_errors->add( <span>'email_invalid'</span>, <span>'Email is not valid'</span> ); }</span>9、检查电子邮件是否被注册
<span>if</span><span> ( !is_email( $email ) ) { $reg_errors->add( <span>'email_invalid'</span>, <span>'Email is not valid'</span> ); }</span>
10.、如果用户填写了网站字段,需要检查其是否有效
<span>if</span><span> ( ! <span>empty</span>( $website ) ) { <span>if</span> ( ! filter_var( $website, FILTER_VALIDATE_URL ) ) { $reg_errors->add( <span>'website'</span>, <span>'Website is not a valid URL'</span> ); } }</span>
11、最后,我们在WP_Error实例中对错误进行循环,并显示个别的错误
<span>if</span><span> ( is_wp_error( $reg_errors ) ) { <span>foreach</span> ( $reg_errors->get_error_messages() <span>as</span> $error ) { <span>echo</span> <span>'<div>'</span>; <span>echo</span> <span>'<strong>ERROR</strong>:'</span>; <span>echo</span> $error . <span>'<br/>'</span>; <span>echo</span> <span>'</div>'</span>; } }</span>
这样,验证函数就完成了。接下来是
complete_registration()<span>函数,用于处理用户注册。用户的注册真正完成是通过wp_insert_user函数,</span>
<span>用户的数据作为数据保存后可以作为此函数的参数。</span>
<span><br> </span>
<span>function</span><span> complete_registration() { <span>global</span> $reg_errors, $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio; <span>if</span> ( 1 > count( $reg_errors->get_error_messages() ) ) { $userdata = <span>array</span>( <span>'user_login'</span> => $username, <span>'user_email'</span> => $email, <span>'user_pass'</span> => $password, <span>'user_url'</span> => $website, <span>'first_name'</span> => $first_name, <span>'last_name'</span> => $last_name, <span>'nickname'</span> => $nickname, <span>'description'</span> => $bio, ); $user = wp_insert_user( $userdata ); <span>echo</span> <span>'Registration complete. Goto <a href="'</span> . get_site_url() . <span>'/wp-login.php">login page</a>.'</span>; } }</span>
在上面的函数中,我们将$reg_errors作为WP_Error的实例,并将表单字段作为全局变量以便于可以再全局作用域中使用。
我们需要检查$reg_errors是否包含任何错误,如果没有错误,则将用户注册信息插入到WordPress的数据库并用登陆链接来显示注册完成的信息。
然后,把所有我们之前创建的函数全部放在全局函数custom_registration_function()<span>之中</span>
<span>function</span><span> custom_registration_function() { <span>if</span> ( <span>isset</span>($_POST[<span>'submit'</span>] ) ) { registration_validation( $_POST[<span>'username'</span>], $_POST[<span>'password'</span>], $_POST[<span>'email'</span>], $_POST[<span>'website'</span>], $_POST[<span>'fname'</span>], $_POST[<span>'lname'</span>], $_POST[<span>'nickname'</span>], $_POST[<span>'bio'</span>] ); <span>// sanitize user form input</span> <span>global</span> $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio; $username = sanitize_user( $_POST[<span>'username'</span>] ); $password = esc_attr( $_POST[<span>'password'</span>] ); $email = sanitize_email( $_POST[<span>'email'</span>] ); $website = esc_url( $_POST[<span>'website'</span>] ); $first_name = sanitize_text_field( $_POST[<span>'fname'</span>] ); $last_name = sanitize_text_field( $_POST[<span>'lname'</span>] ); $nickname = sanitize_text_field( $_POST[<span>'nickname'</span>] ); $bio = esc_textarea( $_POST[<span>'bio'</span>] ); <span>// call @function complete_registration to create the user</span> <span>// only when no WP_error is found</span> complete_registration( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ); } registration_form( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ); }</span>
我需要说明一下全局函数custom_registration_function()<span>中有哪些代码。</span>
<span> 首先,我通过检查<code>$_POST['submit']<span>是否是空来确定表单是否提交。如果提交了,我就调用</span>
<span><code><span>registration_validation()函数来验证用户提交的表单.</span>
<code><span>然后,确保表单数据的有效性并将有效的数据在表单字段域之后用一个变量命名。最后,调用</span>
<code><span>complete_registration()函数保存用户。我需要调用registration_form()函数来显示用户注册表单。</span>
<code><span>我之前提到过,我打算用短代码模板来支持注册插件。下面就是短代码模的支持代码:</span>
<span>// Register a new shortcode: [cr_custom_registration]</span><span> add_shortcode( <span>'cr_custom_registration'</span>, <span>'custom_registration_shortcode'</span> ); <span>// The callback function that will replace [book]</span> <span>function</span> custom_registration_shortcode() { ob_start(); custom_registration_function(); <span>return</span> ob_get_clean(); }</span>
到这里为止,我们已经完成了插件,下面的一张图片展示了注册表单的外观。
注意,你可能不会得到完全相同的外观,因为WordPress站点的CSS样式不同。
应用插件
为了在WordPress的文章页或独立页面使用这个插件,可以加入以下代码:[cr_custom_registration]
<span>也可以添加列出的模板标记<code><?php custom_registration_function(); ?>
.,这样可以让表单插件成
<span>为WordPress主题的一个部分。你可以从这篇文章的附加代码得到这个插件。</span>
<span><strong>总结</strong></span>
<span><strong> </strong>在这篇文章中,我们一步步创建了一个自定义注册表单并添加到WordPress站点。你可以添加额外字段,进一</span>
<span>步扩展这个注册表单,例如用户角色,AOL IM 账户,但是确保数据时有效的。</span>
<span> 如果你有任何问题或建议你,可以留下评论。</span>
<span>下一篇:</span>
如何在网站中添加音乐 <span><br></span>
<span><br></span><span><br></span>
category-6.php页面有引入wp_head和wp_footer么,插件需要的资源文件需要这两个来加载
这还要插件?!我的wordpress基本上没用插件,这么简单的功能,花个把小时写一个……
插件越多越慢

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中