WordPress 页面自动生成二维码

Gavin Wu 2022年04月10日 7:04 Wordpress 1,563 Views

目前在移动设备上浏览网页越来越普遍,那么给每个网页都生成二维码就越来越重要。下面微言心语就分享自己给每个网页生成二维码的方法; 主要核心代码参考小蝴蝶《缓存远程二维码图片到本地》
不过原代码比较古老,二维码生成服务地址已经打不开,而且调用代码混乱,使用起来不方便,我就将代码改良。

一、在网站根目录建立缓存文件夹

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

二、将下面代码扔到function.php

代码里注释已经非常清楚,大家自行检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*Wordpress页面自动生成二维码
 *url:https://wuean.com/wordpress-automatically-generate-qr-code.html
 *<a href="https://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"/>';
    }

三、调用代码

在需要显示二维码图片的地方调用以下代码

1
<?php post_qr(); ?>

最后,CSS就不多说了,根据自己需要修改
下面是本地测试的效果:
WordPress 页面自动生成二维码|微言心语

题外话

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Top