鉴于 Google 服务在国内的访问很不稳定,我考虑采用本地缓存机制:当页面A初次被访问时,二维码将会被自动缓存到本地,当页面A再次被访问时,二维码将会直接从本地加载,大大提高了页面的加载速度和二维码的显示概率。
实现方法
1、将以下代码添加到主题目录下的 functions.php 文件中。(wp-content/themes/主题名称/functions.php)
function get_qr($url, $path, $qrpic) { set_time_limit(10); $destination_folder = $path ? $path.'/' : ''; $localname = $destination_folder . $qrpic; $file = fopen ($url, "rb"); if ($file) { $newf = fopen ($localname, "wb"); if ($newf) while(!feof($file)) { fwrite( $newf, fread($file, 1024 * 2 ), 1024 * 2 ); } } if ($file) { fclose($file); } if ($newf) { fclose($newf); } } function show_qrcode() { if ( ! is_404() ) { $url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $imgsize = 120; $imgname = md5($url); $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=".esc_url($url) ,"qrcode", $imgname.".jpg"); } echo '<img src="'.get_bloginfo('url').'/qrcode/'.$imgname.'.jpg" alt="巧用“Google API + 本地缓存”机制为每个页面生成二维码" width="'.$imgsize.'" height="'.$imgsize.'" alt="QR_Code" class="sidebar_qrcode_img"/>'; } }
以上代码包含两个函数,get_qr 用于将获得的二维码图片缓存到本地,而 show_qrcode 用于将二维码显示出来。show_qrcode 函数中 $imgsize 表示所获二维码图片的大小,可自行根据需要修改。
2、在网站的根目录下建立一个文件夹 qrcode,确保有写入权限(755或777),用于保存二维码图片缓存。
3、在需要显示二维码的页面如 index.php、single.php、page.php 的合适位置插入如下代码:
<?php show_qrcode(); ?>
如果你想将其放在侧边栏中,你需要额外安装一款插件:Enhanced Text Widget,这款插件允许你在侧边栏使用 PHP 代码。
安装完插件 Enhanced Text Widget 之后,进入“仪表盘——外观——小工具”,将“Enhanced Text”小工具拖入侧边栏中,然后 Title 区填“本页二维码”,在 Content 区填入:
<div>
<?php show_qrcode(); ?>
<span style="float: right;width: 170px;margin-top: 17px;line-height: 175%; ">扫描后您可以在手机、平板电脑等移动设备上继续阅读</span>
</div>
具体的样式可能需要自己调整,看个人喜好了。最终效果见本站,截图如下:
从二维码图片的URL可以看出,二维码图片是从本地加载的: