无作为
不仅仅是一种态度!

DUX主题输入QQ自动获取昵称邮箱

看见许多网站用户在评论的时候都可以直接输入QQ自动获取昵称和邮箱,之前无作为也分享过完整版的教程,不过很遗憾并不适用与dux。

原文:WordPress输入QQ自动获取用户昵称邮箱,这个教程是最原始最好用的版本,不过不适用dux,所以下面给大家带来dux输入QQ获取用户信息的教程。

DUX主题输入QQ自动获取昵称邮箱

更新时间:2019年5月14日

下面补充更新一下,dux主题如何实现以上代码,其他主题可以借鉴。

折腾了几个小时,终于搞定dux主题的问题,这里大家完全按照操作步骤来即可!

所有文件都在下载页面可以直接下载!

1、首先把下载的文件func_getqqinfo.php加入到网站根目录:(大家也可自己新建这个文件名“func_getqqinfo.php”在复制下面代码到里面)

<?php
header("content-Type: text/html; charset=utf-8");
$type = @$_GET['type'] ? $_GET['type'] : '';
if(empty($type)){
	//header("Location:http://www.wuzuowei.net/");
	exit;
}
if($type == "getqqnickname"){
	$qq = isset($_GET['qq']) ? addslashes(trim($_GET['qq'])) : '';
	if(!empty($qq) && is_numeric($qq) && strlen($qq) > 4 && strlen($qq) < 13){
		$qqnickname = file_get_contents('http://users.qzone.qq.com/fcg-bin/cgi_get_portrait.fcg?uins='.$qq); // API
		if($qqnickname){
			$qqnickname = mb_convert_encoding($qqnickname, "UTF-8", "GBK");
			echo $qqnickname;
		}
	}
}
if($type == "getqqavatar"){
	$qq = isset($_GET['qq']) ? addslashes(trim($_GET['qq'])) : '';
	if(!empty($qq) && is_numeric($qq) && strlen($qq) > 4 && strlen($qq) < 13){
		$qqavatar = file_get_contents('http://ptlogin2.qq.com/getface?appid=1006102&imgtype=3&uin='.$qq);  // API
		if($qqavatar){
			echo str_replace("pt.setHeader","qqavatarCallBack",$qqavatar);
		}
	}
}

上面的代码和步骤不需要任何改动,照做即可。

2、把以下代码加入主题function.php中:(此处内容无需改动)

// 数据库插入评论表单的qq字段 
add_action('wp_insert_comment','inlojv_sql_insert_qq_field',10,2);
function inlojv_sql_insert_qq_field($comment_ID,$commmentdata) {
	$qq = isset($_POST['new_field_qq']) ? $_POST['new_field_qq'] : false;  
	update_comment_meta($comment_ID,'new_field_qq',$qq); // new_field_qq 是表单name值,也是存储在数据库里的字段名字
}
// 后台评论中显示qq字段
add_filter( 'manage_edit-comments_columns', 'add_comments_columns' );
add_action( 'manage_comments_custom_column', 'output_comments_qq_columns', 10, 2 );
function add_comments_columns( $columns ){
    $columns[ 'new_field_qq' ] = __( 'QQ号' );        // 新增列名称
    return $columns;
}
function output_comments_qq_columns( $column_name, $comment_id ){
    switch( $column_name ) {
		case "new_field_qq" :
		 // 这是输出值,可以拿来在前端输出,这里已经在钩子manage_comments_custom_column上输出了
		echo get_comment_meta( $comment_id, 'new_field_qq', true );
		break;
	}
}

add_filter( 'get_avatar', 'inlojv_change_avatar', 10, 3 );
function inlojv_change_avatar($avatar){
	global $comment;
	if( get_comment_meta( $comment->comment_ID, 'new_field_qq', true ) ){
		$qq_number =  get_comment_meta( $comment->comment_ID, 'new_field_qq', true );
		$qqavatar = file_get_contents('http://ptlogin2.qq.com/getface?appid=1006102&imgtype=3&uin='.$qq_number);
		preg_match('/http:(.*?)&t/',$qqavatar,$m); // 匹配 http: 和 &t 之间的字符串
		return '<img src="'.stripslashes($m[1]).'" class="avatar avatar-40 photo" width="40" height="40"  alt="qq_avatar" />';
	}else{
		return $avatar ;
	}	
}

3、此处代码加入主题js文件中main.js或者comment.js:

// 初始化
$(function(){
	inlojv_js_getqqinfo();
});

// 设置cookie 
function setCookie(a,c){var b=30;var d=new Date();d.setTime(d.getTime()+b*24*60*60*1000);document.cookie=a+"="+escape(c)+";expires="+d.toGMTString()}
// 获取cookie
function getCookie(b){var a,c=new RegExp("(^| )"+b+"=([^;]*)(;|$)");if(a=document.cookie.match(c)){return unescape(a[2])}else{return null}}

// 核心函数
function inlojv_js_getqqinfo(){
	// 获取cookie
	if(getCookie('user_avatar') && getCookie('user_qq') ){
	
			$('div.comment-user-avatar img').attr('src',getCookie('user_avatar'));
			$('#yuao-comt-qq').val(getCookie('user_qq'));
	}

	$('#yuao-comt-qq').on('blur',function(){
		var qq=$('#yuao-comt-qq').val(); // 获取访客填在qq表单上的qq数字,其中#yuao-comt-qq表示QQ input标签上的id,改成你自己的!	
		$('#yuao-comt-email').val($.trim(qq)+'@qq.com'); // 将获取到的qq,改成qq邮箱填入邮箱表单,其中#yuao-comt-email表示邮箱input标签上的id,改成你自己的!		
		// ajax方法获取昵称
		$.ajax({
			type: 'get',
			url:'http://www.wuzuowei.net/func_getqqinfo.php?type=getqqnickname&qq='+qq,  // func_getqqinfo.php是后端处理文件,注意路径,127.0.0.1 改成你自己的域名
			dataType: 'jsonp',
			jsonp: 'callback',
			jsonpCallback: 'portraitCallBack',
			success: function(data) {
				// console.log(data);
				$('#yuao-comt-author').val(data[qq][6]);	// 将返回的qq昵称填入到昵称input表单上,其中#yuao-comt-author表示昵称input标签上的id,改成你自己的!
				//alert('已获取昵称!'); // 弹出警告
				setCookie('user_qq',qq);	// 设置cookie
			},
			error: function() {
				$('#yuao-comt-qq,#yuao-comt-author,#yuao-comt-email').val(''); // 如果获取失败则清空表单,注意input标签上的id,改成你自己的!
				//alert('糟糕,昵称获取失败!请重新填写。'); // 弹出警告
				
			}
		});
		// 获取头像
		$.ajax({
			type: 'get',
			url: 'http://www.wuzuowei.net/func_getqqinfo.php?type=getqqavatar&qq='+qq, // func_getqqinfo.php是后端处理文件,注意路径,127.0.0.1 改成你自己的域名!
			dataType: 'jsonp',
			jsonp: 'callback',
			jsonpCallback: 'qqavatarCallBack',
			success: function(data) {		
				$('div.comment-user-avatar img').attr('src',data[qq]);	// 将返回的qq头像设置到你评论表单区域显示头像的节点上,div.comment-user-avatar img表示头像节点img标签,改成你自己的!
				//alert('已获取头像!'); // 弹出警告
				setCookie('user_avatar',data[qq]);	 // 设置cookie
			},
			error: function() {
				//alert('糟糕,获取头像失败了!请重新填写。'); // 弹出警告
				$('#yuao-comt-qq,#yuao-comt-author,#yuao-comt-email').val(''); // 清空表单
			}
		});
	});
}

其中红色文字需要修改“http://www.wuzuowei.net”改成自己的域名,https的要改https,如果使用http调用会导致无法获取昵称的问题,邮箱可以正常获取。

4、最后我们需要在前台加入调用代码,把主题文件comments.php的代码改一下。

找到默认代码:

<li class="form-inline"><label class="hide" for="author">昵称</label><input class="ipt" type="text" name="author" id="author" value="<?php echo esc_attr($comment_author); ?>" tabindex="2" placeholder="昵称"><span class="text-muted">昵称 (必填)</span></li>
<li class="form-inline"><label class="hide" for="email">邮箱</label><input class="ipt" type="text" name="email" id="email" value="<?php echo esc_attr($comment_author_email); ?>" tabindex="3" placeholder="邮箱"><span class="text-muted">邮箱 (必填)</span></li>
<li class="form-inline"><label class="hide" for="url">网址</label><input class="ipt" type="text" name="url" id="url" value="<?php echo esc_attr($comment_author_url); ?>" tabindex="4" placeholder="网址"><span class="text-muted">网址</span></li>

改成:其中文字可以随意修改。

<p class="comment-form-author"> <input id="yuao-comt-qq" maxlength="12" name="u" type="text" placeholder="输入QQ号码可以快速填写" onblur="qiuye()" value="<?php echo esc_attr($comment_author); ?>" /> <label>QQ</label> </p> 
<p class="comment-form-author"> <input type="text" name="author" id="yuao-comt-author" class="commenttext" value="<?php echo esc_attr($comment_author); ?>" tabindex="1" /> <label for="author">昵称(必填)</label> </p> 
<p class="comment-form-email"> <input type="text" name="email" id="yuao-comt-email" class="commenttext" value="<?php echo esc_attr($comment_author_email); ?>" tabindex="2" /> <label for="email">邮箱(必填)</label> </p> 
<p class="comment-form-url"> <input type="text" name="url" id="url" class="commenttext" value="<?php echo esc_attr($comment_author_url); ?>" tabindex="3" /> <label for="url">网址</label></p>

替换代码,位置不要换,格式参数换了即可。

到此教程完美结束,快去给你的dux主题添加这个实用的功能吧。


历史上的今天:
赞(21) 打赏
所有免费资源、福利、电影、破解软件未经允许不得转载:www.wuzuowei.net无作为 » DUX主题输入QQ自动获取昵称邮箱

留下评论 6

  1. #5

    能获取,能获取,我调用到现在,发现这个地方需要https才可以,preg_match(‘/http:(.*?)&t/’,$qqavatar,$m); // 匹配 http: 和 &t 之间的字符串

    Mill Wan2个月前 (05-30)回复
  2. #4

    QQ头像的api接口换了,所以无法获取了,我也在找最新接口

    Mill Wan2个月前 (05-30)回复
  3. #3

    好厉害!谢谢老大!!!

    米之家 mizj.cn2个月前 (05-17)回复
  4. #2

    好用

    倆個亾哋圉湢2个月前 (05-17)回复
  5. #1

    很好,感谢博主分享。

    CanaryTheme2个月前 (05-16)回复

无作为-不仅仅是一种态度

登录/注册广告合作

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏