巧用“Google API + 本地缓存”机制为每个页面生成二维码

鉴于 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>

巧用“Google API + 本地缓存”机制为每个页面生成二维码

具体的样式可能需要自己调整,看个人喜好了。最终效果见本站,截图如下:

巧用“Google API + 本地缓存”机制为每个页面生成二维码

从二维码图片的URL可以看出,二维码图片是从本地加载的:

巧用“Google API + 本地缓存”机制为每个页面生成二维码

展开评论