WordPress 网站基于REST API 开发“微信小程序”实战

news/2024/4/29 2:09:08/文章来源:https://blog.csdn.net/weixin_33726943/article/details/89040258

本文原链接:https://devework.com/wordpres...,转载请明链注明原始来源谢谢!


weixin-mini-app.png

几周前,Jeff 花了两天将自己的WordPress 网站做了个微信小程序版本(详细见该文)。这篇文章主要记录自己在开发第一版的过程,顺便为有兴趣的你剖析如何将一个WordPress 网站借助 REST API 开发微信小程序版。本文目标受众为了解WordPress 且有初级前端知识的同学。

原理篇

WordPress 与 REST API

WordPress 在4.6 版本后推出了 REST API, REST API 简单来说就是一种通过 HTTP 请求来获取、更新、删除数据的一种连接客户端与服务端的交互方式。我们访问平常的普通 WordPress 网页,在没有开启静态缓存的情况下,大概是走“从数据库拉取数据—> 服务端 PHP 进程拼成 HTML 直接输出 —> 用户浏览器界面”的过程, REST API 也是类似步骤,但后面两步稍微不同:输出的是 JSON 格式的数据且一般是给客户端使用。有了REST API,一个网站制作各种网站版本(安卓版、iOS 版、以及接下来说的小程序版)而共享一个数据库成为了可能。

REST-API-WXAPP

(原图来自wisdmlabs,稍作修改)

以本站为例,可通过浏览器直接访问REST API 的其中一种URL:https://devework.com/wp-json/wp/v2/posts?per_page=5&page=1 (如果你现在直接访问是403 报错,那是我为了安全而设置的拦截,请自行替换为自己网站的域名),你可能会看到如下图左侧的界面;如果你使用Chrome 浏览器且安装JSONView 插件则为下图右侧的界面。

wordpress 中的rest api

且让Jeff 将上面的URL 解释下,/wp-json/wp/v2/ 这个是WordPress 定义的REST API 的“路由”(router)与版本号等的组合,posts 在WordPress中称为“终点” (endpoint),per_pagepage 则是相关参数。 关于REST API 的名词解释可以参考阮老师的文章。上面的URL 即表示输出第1页最新5篇文章的数据(5篇为1页)。这个URL 接下来将要用到。

微信小程序

微信小程序就不多介绍了,虽然刚开始不温不火,但接下来必然是在国内互联网占据一定的地位。本文在这里也不多谈什么小程序前景如何这些空大话,既然你看到这儿必然是对小程序有兴趣且在某种程度上有一定的肯定。

WordPress + 小程序

微信小程序通过 REST API 获取到 WordPress 网站上的数据,然后通过一定的方式进行数据处理后通过前端代码渲染,然后就是你在微信客户端上看到的界面。

WordPress 的REST API 现在开发得已经很完善了,什么文章数据、页面数据、用户数据等都不在话下,把 WordPress 作为小程序的后端实在是省了不少人力,至少对我们这些前端狗来说不用写苦逼的后端代码。

开发篇

上一章节大致介绍了原理后,接下来就以本站开发的“DeveWork+”小程序第一版v1.0 为例,介绍三个页面(首页、内容页、阅读记录页)大体上是如何做出来的。可以扫描下面的小程序码体验一下,注意看文章的此时你扫描进入的版本可能不是不是第一版了。要看懂本章节的内容,需要你对小程序开发有一定的了解(不要求看完文档,但至少也跑一下官方的例子吧)。另外本章节也不会涉及如何写CSS(WXSS)的部分,默认读者有这方面的基础。

小程序二维码

准备工作

准备工作就不细说,大体上包括如下操作:一是微信公众平台管理后台上注册小程序账号,配置域名等信息;二是服务端确保配置好HTTPS、“合法域名”这块是已经备案的域名。

另外在开始开发之前,我在服务端对WordPress REST API 进行了一些定制化的输出。

项目结构

结合微信官方quick start 的例子与个人需求,将项目结构如下分好:

├── app.js├── app.json├── app.wxss ├── config.js // 配置文件├── image // 图片目录├── pages // 页面目录├── utils // 实用untils 类└── wxParse // 第三方库wxParse

app@2x.png

小程序首页(文章列表页面)

首页即文章列表页面, 即展示最新的5篇文章,然后通过下拉流式加载更多文章(有点无限加载的意味)。使用到WordPress 的REST API 就是 your-site.com/wp-json/wp/v2/posts?per_page={num}&page={num}

index.js 文件里面核心是通过wx.request 接口访问上面的API URL 获取到文章数据并setData 供后续数据渲染:

// https://devework.com/wordpress-rest-api-weixin-weapp.htmlwx.request({url: url,success: function (response) {self.setData({posts: self.data.posts.concat(response.data.map(function (item) {...// 数据过滤/格式化等...return item;}))});}});}

上面的代码我是抽出在一个函数中,方便后续重复调用。设置的数据通过index.wxml 循环输出,当前在此之前因为要做滚动加载,所以采用了小程序的scroll-view组件(官方文档)。

上面的WXML 代码中绑定了两个事件函数:一是下拉事件pullDownRefresh(),一个是点击事件redictSingle(),即点击后跳转到文章详情页。

// https://devework.com/wordpress-rest-api-weixin-weapp.html// 下拉刷新pullDownRefresh: function (event) {var self = this;self.setData({page: self.data.page + 1 //页面+1});console.log('current page:' + self.data.page);this.fetchData({ page: self.data.page });},// 路由导航到文章内页redictSingle: function (event) {console.log('redictSingle');var id = event.currentTarget.id; // 这里的id 其实是WordPress 中的文章id,需要传递到single 页面var url = '../single/single?id=' + id;wx.navigateTo({url: url})}

文章内页(文章详情页面)

文章页使用到的REST API URL是your-site.com/wp-json/wp/v2/post/{id}。也是类似,通过wx.request 接口访问URL 然后渲染数据到WXML 页面上。代码与上面的类似就不重复了。

这里其实涉及到个如何将富文本转为微信小程序可识别的WXML 的问题。因为获取的JSON 数据文章正文部分是一段HTML 代码,如果直接输出是会报错的,需要将这段HTML 代码(俗称富文本)转化为微信小程序WXML 语言。Jeff 使用的是WxParse 这个第三方库,下一章节会有介绍。

阅读记录页面

阅读记录页面

阅读记录页面是用来展示用户浏览历史,直接照着官方的Hello World 例子就做起来了。这个页面用到的主要如下两种接口:LocalStorage 相关接口、用户授权相关接口(wx.loginwx.getUserInfo等)。

从用户体验上考虑,不应该一开始就向用户申请授权,而是有需要的页面才申请;同时也应该做好用户不允许授权的优雅处理。在这里因为小程序的坑以及个人关系第一版处理得不是很完美,代码就不展示了。

记录的文章阅读历史数据是以LocalStorage 的形式保存在客户端而非云端,一句“阅读记录仅保存在本设备”的提示是有必要的。同时基于容量上的考虑将最多数目限制为20条。

// https://devework.com/wordpress-rest-api-weixin-weapp.html// 调用API从本地缓存中获取阅读记录并记录var logs = wx.getStorageSync('readLogs') || [];// 过滤重复值if (logs.length > 0) {logs = logs.filter(function (log) {return log[0] !== id;});}// 如果超过指定数量if (logs.length > 19) {logs.pop();//去除最后一个} logs.unshift([id, response.data.title.rendered]);wx.setStorageSync('readLogs', logs);

上面的代码其实是放在single.js里面的,因为需要将文章id 与标题保存在LocalStorage 上,只有single.js才同时获取这两种数据。

开发者工具上的阅读记录

最后还需要在log.jsonShow生命周期绑定一个更新数据的函数:

// https://devework.com/wordpress-rest-api-weixin-weapp.htmlupdateData: function(cb){var that = this;// readlog this.setData({readLogs: (wx.getStorageSync('readLogs') || []).map(function (log) {return log;})})},

踩坑篇

这个章节主要记录在开发过程中的一些坑以及解决方案。

TabBar 的图片问题

小程序官方宣称支持SVG 图片,但在tabBar 里面的图片并不支持SVG 图片。官方推荐采用81x81 尺寸的png 图片,但这个依然有点坑。建议在设计icon 的时候稍微留点透明的padding 占位,不然会导致图标在真机上会放得很大。

图片防盗链的referer 设置

如果你托管图片的服务器有防盗链处理,那么得将servicewechat.com放入白名单中,并不是想当然的qq.com

Image 的绝对路径必须以https 开头

image 的src 绝对路径,在web 开发中是允许类似//example.com/pic.png的以//开头的存在,这种图片路径在微信web 开发者工具也能正常显示,但在真机上就不能正常加载了,必须是https 开头的绝对路径。

服务端数据侧不好处理的话可以通过下面的util 处理:

// https://devework.com/wordpress-rest-api-weixin-weapp.html// 补全URL 中缺失的 HTTPSfunction addhttps(url) {if (!/^(f|ht)tps?:\/\//i.test(url)) {url = "https:" + url;}return url;}

开发者工具的小程序UA 与实际UA 不同

开发工具中模拟的小程序UA 是类似:

... Chrome/53.0.2785.143 Safari/537.36 appservice webview/100000

而通过Nginx 的log 可以查看到实际的UA 是类似(其实就是微信的UA):

... Mobile/14E304 MicroMessenger/6.6.0 NetType/WIFI Language/zh_CN

某些情况下需要注意这些不同。

默认的Flex 布局

如果你是在官方例子的代码基础上开发你的小程序的,建议先删掉app.wxss 的flex 布局相关代码,会降低你遇到奇葩样式问题的概览。

wxParse 的坑1:code 字符被错误替换

小程序使用到的富文本转化是用wxParse 这个第三方库,用的时候发现有不少坑(但目前是这个库最为实用了)。其中一个就是全局的code 字符都被替换为wx-codexxx 类似的坑,作者本意应该是对code 标签进行这个替换,但可能一不小心写错了。解决方案是暂时删掉那段代码。

wxParse 的坑2:image的src 多解析出一个逗号

看图说话:

image的src 多解析出一个逗号

上图也很好解释了上面的referer 坑与图片路径https 开头的坑。解决方案只能先改动源码(html2json.js 约L130)Fix 下:

// https://devework.com/wordpress-rest-api-weixin-weapp.html// Fix: img 标签数组含有空字符的问题if (imgUrl[0] == ''){imgUrl.splice(0, 1);}

关于富文本这个,好消息是官方的富文本组件已经在路上。

总结篇

至此详略得当地介绍了开发这个WordPress 版小程序的过程,接下来的工作自然是提交到官方并耐心等待审核结果的通知。整个开发过程其实并不太有难度,如果之前有使用过Angular、Vue 这类MVVM 框架,整个开发过程基本上只是看官方文档的问题。

希望本文对你有帮助,如果有疑问可以留言讨论,谢谢~ 本站后续也会有一系列关于小程序开发的文章,欢迎关注。

本站有关小程序的文章:https://devework.com/tag/weapp


本文原链接:https://devework.com/wordpres...,转载请明链注明原始来源谢谢!

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

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

相关文章

SEO重中之重:如何降低网站跳出率

我们在分析网站数据的时候,往往会关注网站跳出率的问题。这个也是笔者一直比较重视的一项,跳出率低说明你网站的内容能够吸引访客,你的内容是对他有用的,在对你网站肯定的同时,也为你的网站带来了老访客,我…

Android 学习论坛博客及网站推荐

一、博客推荐 1)http://blog.csdn.net/android_tutor (Android开发入门基础,高级进阶) 2)http://blog.csdn.net/hellogv (入门与提高,很多例子值得学习) 3)http://ww…

全方位提升网站打开速度:前端、后端、新的技术

本文讲的是全方位提升网站打开速度:前端、后端、新的技术,这里是 我们 充分利用对于网络缓存和 NoSQL 系统的研究,做出一个可以容纳几十万通过电视宣传慕名而来的访问者的网上商城 的故事,以及我们从中学到的一切。 "Shark T…

关于网站文章分类和tag的思考

为什么80%的码农都做不了架构师?>>> 分类是无限分类,即每个分类必须属于一个父分类,最顶级的分类父分类id为0。 一篇文章,应该如何和分类进行关联?传统的做法就是在文章表中有一个category_id字段对应分类…

优酷、YouTube、Twitter及JustinTV视频网站架构设计

2019独角兽企业重金招聘Python工程师标准>>> 优酷视频网站架构 一、网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据…

网站访问量常用指标

2019独角兽企业重金招聘Python工程师标准>>> 网站访问量常用的指标为PV、UV、IP、独立访客等,常用的统计工具有百度统计、CNZZ、Google Analytics、GoStats 、量子统计等。 PV(访问量):即Page View, 即页面浏览量或点击量,用户每次…

怎么让热图显示基因名_热图,PCA画图网站推荐--------- ClustVis

1:前言在生信的分析学习过程中,对结果的可视化是非常重要的,在很多生信文章常见的就是热图,PCA等图。但是在画图之前,我们需要知道,我们这么做的目的是什么?那么画热图和PCA分析图的意义和目的是…

技术干货:使用静态缓存提升网站性能的五种方法!

本文作者: 乔锐杰 现担任上海驻云信息科技有限公司运维总监/架构师。曾任职过黑客讲师、java软件工程师/网站架构师、高级运维、阿里云架构师等职位。维护过上千台服务器,主导过众安保险、新华社等千万级上云架构。在云端运维、分布式集群架构等方面有着…

IIS7 发布网站 出现 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误...

windows7下发布web项目需要安装IIS,当安装完以后,web程序已经映射到了本地IIS上,运行出现如下错误提示处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”原因:vs2010默认的是4.0框架,4.0的框架是独立的CLR&#xf…

下载网站原代码步骤

打开你想复制的网站; 在网站的空白区,鼠标右键选择—页面另存为。会弹出一个窗口,选择需要保存的网页文件类型为“网页,全部”,网页文件的名称根据自己来写,比如是网站的首页就写index.htm ; …

小网站架构优化-提升抗并发能力:子应用程序分离方案

前言:标题为啥要加个“小”,只因为上一篇文章“小网站架构优化:从100并发抗到4000并发”,带了个“小”字,所以这篇也顺流加个“小”了。大意“小”是特指秋色园(流量小,服务器配置低&#xff09…

从运维角度看中大型网站架构的演变之路

前言 网上有很多文章类似于我今天要分享的课程,有架构师写的,有运维写的,还有开发些的,偏重点都不同,今天我以咱们运维角度全面讲解。 一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高性能等特性的&#…

SVN 导出代码在VS2012运行提示“未能将网站xx 配置为使用 ASP.NET 4.0,为了使此网站正确运行,您必须将它手动配置为使用 ASP.NET 4.0”

今天接到了我们自己的一个订餐系统优化的任务,要想执行这个任务就得使用 SVN 获取源代码(我的学习进度还没有走到SVN); 其实这样来一下也好,有助于更好地学习接下来的SVN,哈哈。下面说问题: 1,当…

闪电精灵SEO 打破百度快速排名规则

我们许多站长们都是每天为了自己网站的排名操碎了心,然而纵使每天苦逼的更新网站,做外链,排名未必上得去,度娘总是不给面子,排名优化做的太慢。但是你可知道有一种方法能够在7-30天内快速提高网站排名吗?或者听说过但不会做? 百…

从运维角度看中大型网站架构的演变之路

本文出自 “李振良的技术博客” 博客,请务必保留此出处http://lizhenliang.blog.51cto.com/7876557/1951651 前言 网上有很多文章类似于我今天要分享的课程,有架构师写的,有运维写的,还有开发些的,偏重点都不同&#x…

当代文学网站设计初稿

完成设计初稿;设计思路:页头以毛笔开始,页尾以钢笔结束;为的是形象的表述当代文学从1949年至今的一个发展历程。页面采用古典元素点缀增加页面古典气息,采用笔墨、墨汁等增加页面文学韵味,页面背景采用有点…

网站、数据库的衍变之路

网站、数据库的衍变之路 转发自博客:http://www.cnblogs.com/birdshover/原文地址:http://www.cnblogs.com/birdshover/archive/2009/08/03/1537225.html (一) 最简单的一个网站,可能说是demo更加合适一些,…

20个非常不错的HTML5免费建站模板

HTML5是下一代主要的HTML编码规范,HTML5为网页设计者们提供了一些强大的新功能,HTML5的新功能包括:表单控制、APIS、拖拽、多媒体、屏幕绘图等。 本文向大家推荐12款免费的优秀高质量 HTML5CSS3 模板。 1. Touch The Future: Create An Elega…

20 个非常漂亮的 JavaScript 滑块设计的网站

这些东西一定会用的到的,哒哒 JavaScript 滑块,特别是基于 jQuery 插件的滑块在网站设计中使用非常频繁,下面是 20 个使用该技术设计的网站,设计非常精美,值得参考。 These Are Things Elevate Mathieu Clauss The Dai…

SEO禁用蜘蛛(爬虫)搜索收录网页(全)

手段一: Robots协议:用来告知搜索引擎哪些页面能被抓取,哪些页面不能被抓取;可以屏蔽一些网站中比较大的文件,如:图片,音乐,视频等,节省服务器带宽;可以屏蔽站…