外贸独立站的底层设计密码WordPress 成品站模板
当前位置:首页>WordPress建站>基础教程>WordPress添加自动生成二维码功能(支持缓存到本地)

WordPress添加自动生成二维码功能(支持缓存到本地)

随着手机等移动设备越来越普及,二维码(QR Code)的应用也越来越广泛。今天很高兴地和大家分享一下 WordPress添加自动生成二维码功能(支持缓存到本地)。

qr-code

注:以上配图是倡萌使用其他工具制作的,不是本文生成的。

前些天看到通过Google API来生成二维码,但Google的服务在国内一直都不太稳定,所以倡萌就考虑到缓存到本地,然后找 @小蝴蝶 折腾出核心功能代码,再自己修改下,使它支持 首页、分类、标签、文章和页面 。

1.添加缓存函数到主题的 functions.php 文件

function get_qr($url,$path,$qrpic){     

	set_time_limit (10); //设置十秒超时
	$destination_folder = $path?$path.'/':''; 
	$localname = $destination_folder .$qrpic;     
	$file = fopen ($url, "rb"); //fopen函数的r+模式: 读写方式打开 文件指针指向文件头
	if ($file) {     
		$newf = fopen ($localname, "wb"); // w+,读写方式打开 文件指针指向文件头 如果文件不存在则尝试创建之 
		if ($newf)     
			while(!feof($file)) {     
				fwrite( $newf, fread($file, 1024 * 2 ), 1024 * 2 ); //写入文件,fread控制文件最大的大小,这里是2M 
			}     
	}     
	if ($file) {     
		fclose($file);  //关闭fopen打开的文件   
	}     
	if ($newf) {     
		fclose($newf);     
	}     

} 

注:以上代码是缓存到本地的功能

2.在网站根目录建立一个叫 qrcode 的新文件夹,确保有写入权限(755或777),用于保存图片

3.将代码放到需要输出二维码图片的地方,如single.php、sidebar.php 等

<?php
if(is_single() || is_page() || is_home() || is_front_page() || is_category() || is_tag()) ://只在文章、页面、首页、分类/标签存档,才加载下面的代码

	$imgsize = 150; //二维码图片大小
	if (is_single() || is_page()) $imgname = get_the_id();//使用文章/页面ID命名图片
	elseif (is_home() || is_front_page())  $imgname = 'home';//首页使用home命名
	elseif(is_category()) $imgname = 'cat-'.get_query_var('cat');//分类使用cat-ID 命名
	elseif(is_tag()) $imgname = 'tag-'.get_query_var('tag_id');//标签使用tag-ID 命名

	$localqr =  ABSPATH .'qrcode/'.$imgname.'.jpg';
	if (!file_exists($localqr)) {//如果图片已经存在,则不会再次保存
		get_qr( "http://chart.googleapis.com/chart?cht=qr&chs=".$imgsize."x".$imgsize."&choe=UTF-8&chld=L|2&chl=".get_permalink() ,"qrcode", $imgname.".jpg");
	} 
?>
<img src="<?php echo home_url( '' ); ?>/qrcode/<?php echo $imgname ?>.jpg" width="<?php echo $imgsize ?>" height="<?php echo $imgsize ?>" alt="QR Code"/>
<?php endif; ?>

注:以上代码是命名和显示二维码图片。添加代码后,页面在被第一次访问就会生成图片,然后缓存到本地

使用ID来命名图片,主要是考虑到WordPress的ID是独一无二的(标签、分类的ID和文章、页面的ID可能会重复,所以前面两种都添加的前缀命名),而且是ID基本不会改变的。这样一来每个页面只生成一次图片并缓存到本地目录,然后直接调用本地的图片,不需要每次都访问Google API,从而提高加载速度。

Google QR Code API 介绍:https://developers.google.com/chart/infographics/docs/qr_codes

参考资料:http://xiaohudie.net/code/fopen-qr.html

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
基础教程

WordPress侧边栏文章调用插件:Ultimate Posts Widget

2013-4-23 8:35:54

WordPress插件基础教程

WordPress边栏小工具悬浮固定插件:Q2W3 Fixed Widget

2013-5-4 7:45:02

6 条回复 A文章作者 M管理员
  1. 牧泽

    感谢博主的分享,使用谷歌的API的确很方便,但如果动手能力强一点,能用代码实现的话,也不错,我整理了一份教程,希望能够帮助到大家。
    怎么将qrcode.js生成二维码添加到网站上? – wordpress开发
    https://www.npc.ink/15800.html

  2. google的太卡了,建议用这个。 get_qr( “http://m1000000.com/168?s=256&x=l&t=gif&b=2&c=000000&bg=FFFFFF&o=http://m1000000.com/images/m1000000.png&p=5&a=1&e=0&m=http://m1000000.com”,”qrcode”, get_the_id().”.gif”);
    ?后面的属性s,x,t,b,c,bg,o,p,e,m都可以自定义.其中o=你的logo,m=网址或文字等二维码数据
    -参数- //说明-描述
    s=256 //尺寸size: (64, … 256默认, … 最高3000嘿不怕卡就用)
    x=q //误差的校正 (L = 7% (默认), M = 15%, Q = 25%, H = 30%)
    t=png //生成二维码的格式 (PNG默认, JPEG, GIF)-不区分大小写
    b=2 //border边缘的值( (2, 3, 4默认, … 10)推荐小于5,太大了扫描难
    c=000000 //方块的颜色 (黑色000000默认)
    bg=ffffff //背景的颜色 (白色ffffff默认)强烈推荐白色为底色,其它色好像不能扫描
    o=http://siteurl/logo.png //Logo这个标志将出现在二维码中间,换上你的LOGO(PNG, JPEG, GIF都可以。LOGO链接不对就无法看到二维码)
    p=10 //logo 覆盖率 (二维码的百分比 – 推荐 10%)
    a=1 //自动调整的标志 (0/1),1=表示自动调整
    e=1 //二维码的色彩效果 (0/1),0=单色;1=混合彩色
    m=http://sitename.com/ //二维码的内容数据(permalink默认连接,留空值是=http://m1000000.com),你可以调换成80个文字,不怕卡就可以更多字数

  3. 小呆

    我想问下 白边问题 你说到可以不使用谷歌的API 使用这一句http://api.qrserver.com/v1/create-qr-code/?size=100×100&data=
    请问在代码哪个地方加?谢谢 我怎么找不到?谢谢了

  4. 功能皻,我已经放在主题的文章信息中了,扫描也成功了。
    不过二维码生成后,边缘白色宽度很大很大
    &choe=UTF-8&chld=L|2&chl=
    可以修改上面的2,为1即可把宽度降低
    然后缺点是图片保存在本地,使用一小时后,光图片大小就有几百MB了。每张大约200-700KB不等,非常耗费资源。而我网站是用云存储的,要是能修改成上传到指定的云空间就好了。

  5. 缓存到本地,这功能不错

  6. 不错不错~~

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索