目前在移动设备上浏览网页越来越普遍,那么给每个网页都生成二维码就越来越重要。下面微言心语就分享自己给每个网页生成二维码的方法; 主要核心代码参考小蝴蝶的《缓存远程二维码图片到本地》
不过原代码比较古老,二维码生成服务地址已经打不开,而且调用代码混乱,使用起来不方便,我就将代码改良。
一、在网站根目录建立缓存文件夹
在网站根目录建立一个叫 qrcode 的新文件夹,确保有写入权限(755或777),用于保存图片
二、将下面代码扔到function.php
代码里注释已经非常清楚,大家自行检查
/*wordpress页面自动生成二维码
*url:http://wuean.com/wordpress-automatically-generate-qr-code.html
*<a href="http://wuean.com/">微言心语</a> 整理优化
*/
//写入本地缓存
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);
}
}
//页面二维码
function post_qr(){
$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://api.qrserver.com/v1/create-qr-code/?size=".$imgsize."x".$imgsize."&data=".get_permalink() ,"qrcode", $imgname.".jpg");
}
echo '<img src="/'.home_url().'/qrcode/'.$imgname.'.jpg" width="'.$imgsize.'" height="'.$imgsize.'" alt="QR Code"/>';
}
三、调用代码
在需要显示二维码图片的地方调用以下代码
<?php post_qr(); ?>
最后,CSS就不多说了,根据自己需要修改
下面是本地测试的效果:

题外话
我主要是原将代码作了以下的优化:
1、谷歌二维码地址改成QRserver,众所周知的原因,谷歌二维码服务打不开。
2、将原代码里的繁杂的调用代码,都扔到function.php里,简化了调用代码。用起来更方面,也更灵活。
1、谷歌二维码地址改成QRserver,众所周知的原因,谷歌二维码服务打不开。
2、将原代码里的繁杂的调用代码,都扔到function.php里,简化了调用代码。用起来更方面,也更灵活。
