當前位置:首頁>WordPress建站>后臺定制>WordPress 注冊表單添加驗證問題(支持多個隨機問題)

WordPress 注冊表單添加驗證問題(支持多個隨機問題)

通常網(wǎng)站的注冊表單都使用驗證碼來進行驗證,但是有沒有考慮過使用驗證問題來驗證呢?使用問題驗證的好處在于:防止機器人注冊(和驗證碼一樣),只有知道答案的人才能注冊(可用于限制用戶注冊)。下面將添加一個驗證問題:中國的首都是哪里?答案是個正常人都知道:北京。

security-question-wpdaxue_com

將下面的代碼添加到主題的 functions.php 即可:

/**
 * WordPress 注冊表單添加驗證問題
 * http://www.ydqwiac.cn/add-a-security-question-to-the-register-screen.html
 */
add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
	<p>
	<label><?php _e('中國的首都是哪里?') ?><br />
		<input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" /></label>
	</p>
<?php }

add_action( 'register_post', 'add_security_question_validate', 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
	// 如果沒有回答
	if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
		return $errors->add( 'proofempty', '<strong>錯誤</strong>: 您還沒有回答問題。'  );
	// 如果答案不正確
	} elseif ( strtolower( $_POST[ 'user_proof' ] ) != '北京' ) {
		return $errors->add( 'prooffail', '<strong>錯誤</strong>: 您的回答不正確。'  );
	}
}

注:第 8 行是問題,第 19 行是正確的答案。

如果你想限制用戶注冊,將問題和答案設置為只有某些人知道的即可(比如只在某個Q群告知)

2013-10-08 更新:

有朋友詢問如何添加多個隨機問題,感謝 @Rilun 提供了解決辦法。

要實現(xiàn)多個隨機問題,需要添加兩個數(shù)組,分別存放著問題和答案,再增加一個兩個函數(shù)都能取到的隨機數(shù)(也就是在注冊表單開始之前進行一個Session)即可。代碼如下:

/**
 * WordPress 注冊表單添加驗證問題(支持多個隨機問題)
 * http://www.ydqwiac.cn/add-a-security-question-to-the-register-screen.html
 */
function rand_reg_question(){
	$register_number=rand(0,1); // 設置隨機數(shù)的返回范圍
	$_SESSION['register_number']=$register_number;
}
add_action('login_head','rand_reg_question');

global $register_questions;
global $register_answers;
// 添加問題數(shù)組
$register_questions=array('中國的首都在哪里?','Google是哪個國家的公司?');
// 添加答案數(shù)組(與上面的問題對應)
$register_answers=array('北京','美國');

add_action( 'register_form', 'add_security_question' );
function add_security_question() {
	global $register_questions;
	$register_number=$_SESSION['register_number'];
	?>
	<p>
		<label><?php echo $register_questions[$register_number];?><br />
			<input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" />
		</label>
	</p>
<?php }

add_action( 'register_post', 'add_security_question_validate', 10, 3 );
function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
	global $register_answers;
	$register_number=$_SESSION['register_number'];
	if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
		return $errors->add( 'proofempty', '<strong>錯誤</strong>: 您還沒有回答問題。' );
	} elseif ( strtolower( $_POST[ 'user_proof' ] ) != $register_answers[$register_number] ) {
		return $errors->add( 'prooffail', '<strong>錯誤</strong>: 您的回答不正確。' );
	}
}

注:請編輯 14 和 16 行修改問題和答案,如果你修改了問題的數(shù)量,請記得修改第 6 行的 隨機數(shù)返回范圍 rand(0,1) ,比如 3 個問題,修改為 rand(0,2) ,更多說明,請參考 rand() 函數(shù)文檔

聲明:本站所有文章,如無特殊說明或標注,均為本站原創(chuàng)發(fā)布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺。如若本站內(nèi)容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關注WordPress大學公眾號 WPDAXUE
后臺定制

WordPress 自動為新文章添加已使用過的標簽

2013-10-5 10:33:47

后臺定制

去除儀表盤“概況”的WordPress版本信息

2013-10-7 7:47:00

15 條回復 A文章作者 M管理員
  1. bsu2000

    請教一下,站點使用了主題自帶的注冊和登陸頁面,非系統(tǒng)界面,具體怎么安裝驗證問題的功能?已經(jīng)試過,將代碼添加到主題的 functions.php 里無任何效果,現(xiàn)在煩死了,每天都有大量的yahoo郵箱注冊的垃圾賬戶,封IP也解決不了!

    • 網(wǎng)站編輯

      請聯(lián)系主題作者,他比較熟悉主題代碼

  2. 第二個他忘寫session_start()了

  3. 有沒有在注冊頁面添加一個QQ郵箱是否訂閱的功能呢?

  4. 多個問題的還有問題,得矯正一下

  5. 已添加問題,但是自定義的注冊頁面(露兜的那個)顯示不出,如何添加到特定頁面呢?

  6. 第一段正常。第二段隨機的代碼添加后,注冊后臺能正常顯示問題,但是答案不論怎么填都是提示 錯誤: 您的回答不正確。
    請博主測試。

    • 我也碰到了同樣的問題

    • 應該是答案也隨機了

  7. 小呆

    這些代碼添加到哪個文件里呢?函數(shù)文件還是注冊模版文件?謝謝

    • 小呆

      嗯 謝謝 我的是自定義注冊頁面 我想要的效果是在我的注冊頁面里顯示一個這樣的驗證,我想問我這樣的代碼應該怎么加?謝謝了

  8. Tokin

    怎么隨機呢,表示不會PHP,哈哈

    • 網(wǎng)站編輯

      我也不知道如何隨機,但是設定一個問題即可,弄那么多干啥呢

    • 網(wǎng)站編輯

      文章已經(jīng)更新,可以支持多個隨機問題啦

?
個人中心
購物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

崇信县| 海伦市| 毕节市| 永吉县| 和林格尔县| 富顺县| 广东省| 象州县| 宁河县| 垣曲县| 西乌珠穆沁旗| 无极县| 衡水市| 武安市| 宁夏| 宿松县| 如东县| 阜新市| 穆棱市| 大庆市| 汉沽区| 青神县| 雷州市| 利辛县| 额济纳旗| 花莲市| 德钦县| 沙坪坝区| 洞头县| 淮滨县| 论坛| 巴南区| 威远县| 榕江县| 安溪县| 忻州市| 韶关市| 汽车| 石首市| 三原县| 宜丰县|