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

这是一个从星宿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源码
关注微信公众号回复:星宿订阅消息