wordpress开发之实现使用第三方库qrcode-generator生成二维码并上传和展示

文章目录

    • 一、需求
    • 二、技术实现 - 利用qrcode-generator库
    • 三、代码实现

一、需求

客户的需求是能将特定的url生成二维码,以便将二维码分享或贴到合同纸上给他的客户扫描查看信息。

这个url包含的内容类似于如下格式:

https://www.example.com/contract?bhid=HXDB-L-2024121503&bhcode=Swf3

效果如下:

二维码效果

二、技术实现 - 利用qrcode-generator库

我用的是wordpress,基于PHP,而且需要将二维码上传到服务器,并且写入到数据库中。所以最好的方式就是直接用PHP来写功能,而不是JS来实现。

能生成二维码的库不少,其中有一个不错,简单易用:qrcode-generator(https://github.com/kazuhikoarase/qrcode-generator)。

它可以用你最喜欢的编程语言来生成二维码,JSjavaPHP等都可以生成,案例地址:https://kazuhikoarase.github.io/qrcode-generator/js/demo/.

image-20250104112025951

那么如何生成呢,我的思路就是,在保存保函的时候,通过wp的保存文章的钩子函数save_post调用二维码生成函数,生成二维码后,存储图片到服务器中,返回url写入到对应保函记录中。

三、代码实现

wp的主题下,有个function.php,它允许开发者为主题添加功能、修改默认行为以及注册新的功能或功能模块等。比如我刚刚说的保函即为一种自定义文章类型,在该类型下,来生成保函信息和二维码的查询url等。

如果你还不了解wp的function.php的作用,可以看这篇文章:https://blog.csdn.net/imqdcn/article/details/144529634

完成生成二维码图片,上传到服务器,并返回图片url的核心代码如下:

1、到qrcode-generatorgithub仓库中下载 qrcode.php库,并且放在主题的inc文件夹下(你也可以放在主题根目录下)

然后在funnction.php中导入:

require_once get_template_directory() . '/inc/qrcode.php';

2、实现保存文章的钩子函数

function generate_qr_on_save($post_id) {// 检查是否是自动保存,防止重复执行if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return;}// 检查是否是特定的文章类型(可选)if (get_post_type($post_id) == 'baohan') {// echo '正在生成二维码...';// 获取文章的 bhid 和 bhcode 元数据$bhid = get_post_meta($post_id, 'bhid', true);$bhcode = get_post_meta($post_id, 'bhcode', true);// 确保必要数据存在if (empty($bhid) || empty($bhcode)) {return;}// 拼接要生成二维码的url$url =  home_url() . '/baohan';$search = "bhid={$bhid}&bhcode={$bhcode}";$qr_content = $url . '?' . $search;// 生成二维码图像$qr = QRCode::getMinimumQRCode($qr_content, QR_ERROR_CORRECT_LEVEL_L);$im = $qr->createImage(4, 4);// 保存二维码到文件$upload_dir = wp_upload_dir();$file_path = $upload_dir['path'] . '/qr_' . $post_id . '.gif'; // 文件名以文章ID命名避免冲突imagegif($im, $file_path);imagedestroy($im);// 检查文件是否保存成功if (file_exists($file_path)) {// 构建二维码的 URL$qr_url = $upload_dir['url'] . '/qr_' . $post_id . '.gif';// 保存二维码 URL 到文章的 qrCode 元数据update_post_meta($post_id, 'qrCode', $qr_url);} else {error_log("Failed to save QR code for Post ID $post_id.");}}
}
add_action('save_post', 'generate_qr_on_save');

这样就可以保存二维码到wp的上传目录,且写入该二维码的url到当前文章的qrCode字段了。

因为我不需要在媒体库中管理,所以,并没有调用上传到媒体库的钩子函数,无法在后台的媒体库中看到。

3、如何显示到wp的管理后台(如图一效果)

只需要在遍历列表时,添加如下判断:

$qr_url = get_post_meta( $post->ID, 'qrCode', true );
if($qr_url){echo "<img src='{$qr_url}' width='100' height='100' />";
}else{echo "编辑或新建后保存一次,二维码才会生成";
}

这样就完美实现了如上需求。

也就是说二维码包含的信息可以是任意的,本文所实现的无非就是将特定的url转为二维码,并且将二维码图片上传到服务器而已。


如果你在web前端开发、面试、前端学习路线有困难可以在下方加我名片。

免费答疑,行业深潜多年的技术牛人帮你解决bug。

并可提供web前端开发,网站开发、技术咨询、答疑、直播讲座等服务。

祝你能成为一名优秀的WEB前端开发工程师!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503350.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3 数字滚动效果

效果图 代码 <template><div class"number-scroller"><divclass"viewport":style"{ width: width px, height: height px }"><div class"number-scroller-box" ref"num"><div v-for"num…

谷粒商城-高级篇-Sentinel-分布式系统的流量防卫兵

1、基本概念 1.1、熔断降级限流 1、什么是熔断 A 服务调用 B 服务的某个功能&#xff0c;由于网络不稳定问题&#xff0c;或者 B 服务卡机&#xff0c;导致功能时间超长。如果这样子的次数太多。我们就可以直接将 B 断路了&#xff08; A 不再请求 B 接口&#xff09;&#…

手机租赁平台开发实用指南与市场趋势分析

内容概要 在当今快速变化的科技时代&#xff0c;手机租赁平台的发展如火如荼。随着越来越多的人希望使用最新款的智能手机&#xff0c;但又不愿意承担昂贵的购机成本&#xff0c;手机租赁平台应运而生。这种模式不仅为用户提供了灵活的选择&#xff0c;还为企业创造了新的商机…

计算机网络 (22)网际协议IP

一、IP协议的基本定义 IP协议是Internet Protocol的缩写&#xff0c;即因特网协议。它是TCP/IP协议簇中最核心的协议&#xff0c;负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。IP协议为每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个唯一的IP…

NUTTX移植到STM32

STM32移植NUTTX 1. Ubuntu下搭建开发环境1.1 先决条件1.2 下载 NuttX1.3 使用Make 进行编译1.4 烧录运行 2.通过NUTTX点亮LED2.1 部署操作系统2.2 修改配置文件2.3 编译运行程序 开发板&#xff1a;DshanMCUF407 官方开发文档&#xff1a;安装 — NuttX latest 文档 参考文档&…

MITRE ATTCK 简介:初学者指南

网络安全已成为当今数字世界的一个关键问题。随着网络威胁日益复杂&#xff0c;组织需要一种结构化的方法来理解和应对这些风险。这就是 MITRE ATT&CK 框架发挥作用的地方。如果您是网络安全新手或刚刚开始探索威胁分析和缓解&#xff0c;本指南将为 MITRE ATT&CK 提供…

JAVA创建绘图板JAVA构建主窗口鼠标拖动来绘制线条

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…

鸿蒙 ArkUI实现地图找房效果

常用的地图找房功能&#xff0c;是在地图上添加区域、商圈、房源等一些自定义 marker&#xff0c;然后配上自己应用的一些筛选逻辑构成&#xff0c;在这里使用鸿蒙 ArkUI 简单实现下怎么添加区域/商圈、房源等 Marker. 1、开启地图服务 在华为开发者官网&#xff0c;注册应用&…

AI Development Notes 1 - introduction with the OpenAI API Development

Official document&#xff1a;https://platform.openai.com/docs/api-reference/chat/create 1. Use APIfox to call APIs 2.Use PyCharm to call APIs 2.1-1 WIN OS.Configure the Enviorment variable #HK代理环境&#xff0c;不需要科学上网(价格便宜、有安全风险&#…

ComfyUI节点安装笔记

AI高速发展&#xff0c;版本更新相当快&#xff08;11月25日才安装的版本v.0.3.4&#xff0c;27日版本就已经更新到v.0.3.5了&#xff09;&#xff0c;在遇到问题&#xff0c;找到问题原因所在的过程中&#xff0c;ComfyUI版本、python版本、节点对环境版本的依赖&#xff0c;本…

小白学Pytorch

小白学Pytorch 发现一个比较好的教程&#xff0c;对于自己来说比较合适&#xff0c;适合从零开始的教程。 1、搭建一个简单的网络 https://www.cnblogs.com/PythonLearner/p/13587092.html 搭建网络这步说的比较清楚&#xff1a; 我们使用nn包中的Sequential搭建网络&#…

如何查看服务器上的MySQL/Redis等系统服务状态和列表

如果呢你知道系统服务名称&#xff0c;要看状态很简单&#xff1a; systemctl status server-name 比如 systemctl status nginxsystemctl status redis # 等 这是一个nginx的示例&#xff1a; 那问题是 当你不知道服务名称时该怎么办。举个例子&#xff0c;比如mysql在启动…

ubuntu开机启动服务

需求背景&#xff1a; 需要监控日志&#xff0c;每次都是手动启动 nohup ./prometheus >/dev/null & nohub ./node_exporter >/dev/null & 需求目标&#xff1a; 重启后系统自动启动服务

路由组件与一般组件的区别

路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件&#xff0c;通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件&#xff0c;通常放在 components 文件夹中。 2. 主要区别 2.1 存…

Qt天气预报系统设计界面布局第四部分右边

Qt天气预报系统 1、第四部分右边的第一部分1.1添加控件 2、第四部分右边的第二部分2.1添加控件 3、第四部分右边的第三部分3.1添加控件3.2修改控件名字 1、第四部分右边的第一部分 1.1添加控件 拖入一个widget&#xff0c;改名为widget04r作为第四部分的右边 往widget04r再拖…

数据库系统概论期末复习

期末考试题型&#xff1a; 选择题 20题 20分 判断题 10题 10分 简答题 4题 20分 SQL语句&#xff1a; &#xff08;select delete update&#xff09;30分 设计题&#xff1a;ER图 和关系模式 ER转关系模式&#xff0c;注意主码&#xff0c;外码的标注 15分 应用题&#xff1a;…

uni-app 页面生命周期及组件生命周期汇总(Vue2、Vue3)

文章目录 一、前言&#x1f343;二、页面生命周期三、Vue2 页面及组件生命周期流程图四、Vue3 页面及组件生命周期流程图4.1 页面加载时序介绍4.2 页面加载常见问题4.3 onShow 和 onHide4.4 onInit4.5 onLoad4.6 onReachBottom4.7 onPageScroll4.8 onBackPress4.9 onTabItemTap…

微信小程序中 “页面” 和 “非页面” 的区别

微信小程序中 “页面” 和 “非页面” 的区别&#xff0c;并用表格进行对比。 核心概念&#xff1a; 页面 (Page)&#xff1a; 页面是微信小程序中用户可以直接交互的视图层&#xff0c;也是小程序的基本组成部分。每个页面都有自己的 WXML 结构、WXSS 样式和 JavaScript 逻辑…

【Linux】传输层协议UDP

目录 再谈端口号 端口号范围划分 UDP协议 UDP协议端格式 UDP的特点 UDP的缓冲区 UDP注意事项 进一步深刻理解 再谈端口号 在上图中&#xff0c;有两个客户端A和B&#xff0c;客户端A打开了两个浏览器&#xff0c;这两个客户端都访问同一个服务器&#xff0c;都访问服务…

大数据架构演变

一、离线数仓 缺点&#xff1a; ETL计算、存储、时间成本高数据处理链路过长无法支持实时、近实时的数据分析数据采集对业务库造成影响 二、Lambda架构&#xff0c;离线实时分开 缺点&#xff1a; 组件多&#xff0c;不方便管理很难保证数据一致数据探查困难&#xff0c;出现…