评论
【开源扩展】wordpress微信小程序订阅消息插件,附完整uni-app案例

【开源扩展】wordpress微信小程序订阅消息插件,附完整uni-app案例

既然生命如此短暂,那么慢慢地亲吻,尽情地欢笑,真心去爱,快快地原谅吧

这是一个从星宿UI 4.0上剥离的一款插件,为了它可以用更扩展DIY,甚至没使用星宿UI的大佬们都可以使用它扩展其他wordpress的程序

 功能

实现微信小程序订阅消息功能,支持新文章发布时自动推送

逻辑

用户点击按钮

判断是否有openID

本地有缓存直接请求

本地没有者请求获取openID

最后记录订阅消息用户openID,发文章时默认推送订阅消息

(注:插件不保留获取的用户信息,小程序端只缓存openID,后端只记录订阅用户)

使用

下载插件后,在wordpress后台---插件---上传插件。安装完成

在wordpress后台---设置---微信小程序二维码。配置小程序AppID,AppSecret,默认跳转页面,默认模板ID

小程序效果

模板选择

插件是需要输入模板ID的,可以在微信小程序后台,订阅消息中搜索资讯,查看模板

我们需要注意的是,小程序需要有信息查询类目搜索出才会出现对于的模板(可注意图中红圈中标记)。如果搜索出来没有信息查询类目,检测小程序是都没添加该类目

选择信息查询类目的资讯更新提醒模板,勾选:资讯标题,发布时间,资讯内容即可,随后我们就可以看到模板ID

二开

如果资讯更新模板无法满足你需求,可以自行选用其他模板。其他模板选择后,打开模板详情基础模板参数(图中红线部分)

打开插件php文件编辑,修改成对于的内容即可

案例

uni-app案例

<template>
<view class="subscribe-container">
<!-- 订阅按钮 - 点击触发订阅流程 -->
<button class="subscribe-btn" @click="subscribeMessage">订阅消息通知</button>
<!-- 状态消息显示区域 -->
<view class="status-message">{{ statusMessage }}</view>
</view>
</template>

<script>
/**
	 * 微信小程序消息订阅组件
	 * 功能:处理用户订阅/取消订阅流程,包括OpenID获取、权限请求和后端同步
	 */
export default {

data() {
return {
templateId: '',
openID: '',
statusMessage: '',
			};
		},
onLoad() {},
methods: {
subscribeMessage() {
				uni.request({
url:'https://frche.frbkw.com/wp-json/wmp-subscribe/v1/template-id',
method: 'POST',
success: (res) => {
this.templateId = res.data.template_id;
					}
				})

let openid = uni.getStorageSync('openid');
if (openid) {
this.postMessage(); //请求订阅
				} else {
this.getOpenid(); //openid
				}
			},


// 请求订阅
postMessage() {
let openid = uni.getStorageSync('openid');
				uni.requestSubscribeMessage({
tmplIds: [this.templateId],
success: res => {
console.log('订阅请求返回结果:', res);
const templateStatus = res[this.templateId];
if (templateStatus === 'accept') {
// 3. 订阅成功,通知后端
console.log('用户已同意订阅,通知后端');
this.errorCount = 0; // 重置错误计数
this.notifyBackend(openid, this.templateId, true);
						} else {
this.statusMessage = `订阅状态异常: ${templateStatus || '未知状态'}`;
console.warn('订阅返回未知状态:', templateStatus);
this.loading = false;
						}
					},
				});
			},

notifyBackend(openid, templateId, isSubscribe) {
const url = isSubscribe ?
'https://frche.frbkw.com/wp-json/wmp-subscribe/v1/subscribe' // 订阅API端点
					:
'https://frche.frbkw.com/wp-json/wmp-subscribe/v1/unsubscribe'; // 取消订阅API端点

				uni.request({
url: url,
method: 'POST',
data: {
openid: openid,
template_id: templateId
					},
success: res => {
if (res.data.success) {
// 根据订阅状态显示相应的成功消息
this.statusMessage = isSubscribe ? '订阅成功!' : '取消订阅成功';
						} else {
this.statusMessage = `操作失败: ${res.data.message || '未知错误'}`;
						}
this.loading = false;
					},
fail: err => {
this.statusMessage = `网络请求失败: ${err.errMsg}`;
console.error('通知后端失败:', err);
this.loading = false;
					}
				});
			},


// 获取openid
getOpenid() {
console.log('获取openid')
				uni.login({
provider: 'weixin',
success: loginRes => {
// 调用后端接口获取OpenID
						uni.request({
url: 'https://frche.frbkw.com/wp-json/wmp-subscribe/v1/get-openid',
method: 'POST',
data: {
code: loginRes.code
							},
success: (res) => {
// 判断接口返回是不是200,如果是缓存openid,如果不是返回错误
if (res.statusCode === 200) {
									uni.setStorageSync('openid', res.data.openid);
this.postMessage(); //请求订阅
								} else {
this.statusMessage = '获取OpenID失败';
								}
							},
						});
					},
				});
			},
		}
	};
</script>

<style scoped>
/* 订阅容器样式 - 使用flex布局居中内容 */
.subscribe-container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
padding: 20rpx;
	}

/* 订阅按钮样式 */
.subscribe-btn {
width: 80%;
height: 80rpx;
background-color: #007aff;
color: white;
border-radius: 40rpx;
font-size: 32rpx;
margin-bottom: 30rpx;
	}

/* 状态消息样式 */
.status-message {
font-size: 28rpx;
color: #666;
text-align: center;
	}
</style>

下载

下载星宿UI插件 + uni-app源码

关注微信公众号回复:星宿订阅消息