Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >开发 | 无需后端编码,手把手教你把 WordPress 做成小程序

开发 | 无需后端编码,手把手教你把 WordPress 做成小程序

作者头像
知晓君
发布于 2018-08-01 08:35:34
发布于 2018-08-01 08:35:34
1.6K0
举报
文章被收录于专栏:知晓程序知晓程序
文 | Jeff

我花了两天时间,将自己的 WordPress 网站做了个微信小程序版本。

这篇文章,记录的就是我自己在开发第一版小程序的过程。

知晓程序(微信号 zxcx0101)今天分享的这篇文章,将一步步讲解,如何将一个 WordPress 网站借助 REST API 开发微信小程序版。

关注「知晓程序」公众号,在微信后台回复「开发」,获取小程序开发技巧精选文章。

小程序如何读取 WordPress 博客内容?

WordPress 在 4.6 版本推出了 REST API。简单来说,它是一种通过 HTTP 请求完成的客户端与服务端数据交互方案。

我们访问平常的普通 WordPress 网站,在没有开启静态缓存的情况下,大致需要「从数据库拉取数据 → 服务端 PHP 进程拼成 HTML → 用户浏览器界面」的过程。

REST API 的处理过程类似,但稍微不同的是:输出的是 JSON 格式的数据,且一般是给客户端(非网页浏览器)使用。

有了 REST API,一个网站制作不同客户端(AndroidiOS 的 app,以及微信小程序),而共享一个数据库成为了可能。

我们可通过浏览器,直接访问 WordPress 的其中一个接口地址:your-site.com/wp-json/wp/v2/posts?per_page=5&page=1,你可能会看到类似这样的返回。

现在,让我将上面的 URL 解释下。

  • /wp-json/wp/v2/ 是WordPress 定义的 REST API 路由(router)与版本号等的组合。
  • posts 在 WordPress 中,称为「终点」(endpoint)。
  • per_pagepage 则是参数。

上面的 URL,表示输出第 1 页最新 5 篇文章的数据(5 篇为 1 页)

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

WordPress 的 REST API 已经很完善了,什么文章数据、页面数据、用户数据等都不在话下。

把 WordPress 作为小程序的后端,实在是省了不少人力,至少对我们这些前端狗来说,不用写苦逼的后端代码。

开始动手,做一个 WP 小程序

上一章节大致介绍了原理后,接下来就以本站开发的「DeveWork 极客」小程序第一版为例,介绍三个页面(首页、内容页、阅读记录页)大体上是如何做出来的。

1. 准备工作

准备工作就不细说,大体上包括如下操作。

  • 在微信公众平台管理后台上注册小程序账号,配置合法域名等信息。
  • 二是服务端确保配置好 HTTPS(但不一定要求备案)。

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

2. 项目结构

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

3. 构建文章列表页面

小程序的首页,就是文章列表页面。启动小程序时,会展示最新的 5 篇文章,然后通过下拉流式加载更多文章。

在这里,我们用到的 WordPress REST API 就是 your-site.com/wp-json/wp/v2/posts?per_page={num}&page={num}

index.js 文件的核心,是通过 wx.request 接口,访问上面的 API URL 获取到文章数据,再 setData 进行渲染

我将这些代码封装在函数中,方便后续重复调用。

设置的数据通过 index.wxml 循环输出。因为要做滚动加载,所以采用了小程序的 scroll-view 组件。

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

4. 构建文章详情页

文章页使用到的 API 地址是 your-site.com/wp-json/wp/v2/posts/{id}类似地,通过 wx.request 接口访问 URL,然后渲染数据到 WXML 页面上。

代码与上面的类似,就不再重复。但需要提醒的是,这里涉及到如何将富文本转为微信小程序可识别的 WXML 的问题。

因为获取的 JSON 数据中,文章正文部分是一段 HTML 代码。如果将 HTML 直接输出到小程序中,是会报错的。

我们需要将这段 HTML 代码转化为微信小程序 WXML 语言,下一章节我会介绍这个过程。

5. 阅读记录页面

阅读记录页面是用来展示用户浏览历史,直接照着官方的 Hello World 例子就做起来了。

这个页面用到的主要如下两种接口:本地缓存相关接口、用户授权相关接口(wx.loginwx.getUserInfo 等)。

从用户体验上考虑,不应该一开始就向用户申请授权,而是有需要的页面才申请。同时,也应该做好用户拒绝授权的优雅处理。

关注「知晓程序」微信公众号,在微信后台回复「用户信息」,查看小程序如何正确地获取用户资料。

记录的文章阅读历史数据是以本地缓存的形式保存在客户端,而非云端。所以,一句「阅读记录仅保存在本设备」的提示,是有必要的。

同时,基于小程序缓存限制的考虑,我将记录上限设为 20 篇。

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

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

开发过程中,我踩的坑

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

1. Tab Bar 的图片问题

小程序官方宣称支持 SVG 图片,但 tab bar 并不支持 SVG 图片。

官方推荐采用 81 px × 81 px 尺寸的 PNG 图片,但这个依然有点坑。

建议在设计 icon 的时候,为 tab bar 的图标稍微留点透明的 padding,不然,图标在真机上会放得很大。

2. 图片防盗链的 referer 设置

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

3. image 组件的绝对路径,必须以 HTTPS 开头

image 组件的 src 绝对路径,在 web 开发中是允许类似 //example.com/pic.png 这种省略协议名的存在。

这种图片路径,在微信 web 开发者工具也能正常显示。但是,在真机上就不能正常加载了。在真机上必须是 HTTPS 开头的绝对路径。

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

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

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

而通过 Nginx 的 log,我们可以知道,真机运行的 UA 其实就是微信的 UA:

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

5. 默认的 Flex 布局

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

6. wxParse 的坑

小程序使用到的富文本转化是用 wxParse 这个第三方库,用的时候发现有不少坑(但目前是这个库最为实用了)。

其中一个,就是全局的 code 字符都被替换为 wx-codexxx,作者本意应该是对 code 标签进行这个替换,但可能一不小心写错了。

解决方案,只能是暂时删掉那段代码。

另外,使用 wxParse 的时候,image 组件中的 src 属性,会多解析出一个逗号。

看图说话:

上图也很好解释了上面的 referer 坑与图片路径 HTTPS 开头的坑。解决方案,只能先改动源码(html2json.js)来修复:

关于富文本,好消息是,官方的富文本组件已经发布。

关注「知晓程序」微信公众号,在微信后台回复「富文本」,查看小程序富文本组件新能力解读。

最后的话

至此,我也算是详略得当地,介绍了开发 WordPress 版小程序的过程。接下来的工作,自然是提交到官方并耐心等待审核结果的通知。

整个开发过程其实并不太有难度,如果之前有使用过 Angular、Vue 这类 MVVM 框架,整个开发过程基本上只是看官方文档的问题。

「DeveWork 极客」小程序使用链接

https://minapp.com/miniapp/3016/

原文地址:https://devework.com/wordpress-rest-api-weixin-weapp.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 知晓程序 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《Spring实战》读书笔记-第4章 面向切面的Spring
在软件开发中,散布于应用中多的功能被称为横切关注点(cross-cutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的(但往往会直接嵌入到应用的业务逻辑之中)。把这些横切关注点与业务相分离正是面向切面编程(AOP)所要解决的问题。
Java架构师必看
2020/04/10
6000
面向切面:AOP
大家好,今天本篇博客我们来了解Spring里边的另一个重要部分,叫做AOP,也就是我们说的面向切面编程。
叫我阿杰好了
2023/11/14
2230
面向切面:AOP
Spring AOP面向切面编程
spring提供了一种可插拔的组件技术。听起来很高大上,但在我们日常生活中经常遇到这样的场景,比如说我们现在开发了两个软件模块,A和B,假设软件模块A是系统的用户管理模块,而软件模块B是系统的员工管理模块。这两个模块都拥有自己的业务处理类,他们执行的过程也是以上到下依次执行的。现在我对这两个模块提出一个要求,这两个模块从上到下进行业务处理的过程中,我希望都要进行权限过滤,只有拥有权限的用户才可以访问对应的模块。你可能会在运行实际代码前去增加相应的权限判断的业务代码,A模块加一个,B模块加一个,这样做固然没问题。但是有一天,项目经理说我们现在不需要这两块功能了,那该怎么办呢?此时你又该打开它对应的代码,把所有的权限控制代码全都去掉。那在这时候,有没有更好的办法呢?答案是肯定的。Spring AOP面向切面编程就可以很好地解决这个问题。
害恶细君
2022/11/22
5890
Spring AOP面向切面编程
Spring学习总结(三)——Spring实现AOP的多种方式
AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术。AOP是OOP的补充,是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP可以分为静态织入与动态织入,静态织入即在编译前将需织入内容写入目标模块中,这样成本非常高。动态织入则不需要改变目标模块。Spring框架实现了AOP,使用注解配置完成AOP比使用XML配置要更加方便与直观。上一篇随笔中已经详细讲了代理模式。
张果
2022/05/09
4620
Spring学习总结(三)——Spring实现AOP的多种方式
Spring实战4—面向切面编程主要内容
在南方没有暖气的冬天,太冷了,非常想念北方有暖气的冬天。为了取暖,很多朋友通过空调取暖,但是空调需要耗电,也就需要交不少电费。没家都会有一个电表,每隔一段时间都会有记录员来家里收取这段时间的电费。
阿杜
2018/08/06
1K0
Spring实战4—面向切面编程主要内容
spring aop面向切面原理,用处和实力讲解
上面打印的语句,其实就相当于日志,监控我有没有保存成功,这里我保存的是person对象,如果我还有student,teacher,dog等等很多对象都需要做增删改查操作,是不是在每个增删改查的语句前后都加上这两句话呢?这样不是很繁琐。那么有没有办法让每有执行save操作时就自动前后打印日志呢?这里就应运而生了面向切面AOP
全栈程序员站长
2022/08/09
2370
spring aop面向切面原理,用处和实力讲解
Spring(4)——面向切面编程(AOP模块)
Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用。 AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 所谓的周边功能,比如性能统计,日志,事务管理等等 周边功能在 Spring 的面向切面编程AOP思想里,即被定义为切面 在面向切面编程AO
我没有三颗心脏
2018/04/26
6790
Spring(4)——面向切面编程(AOP模块)
【Spring进阶】基于注解的面向切面编程(AOP)详解
面向切面编程(AOP)是一种编程范式,它允许开发者将横切关注点(如日志记录、事务管理、安全性等)与业务逻辑分离,从而提高代码的模块化和可维护性。在Java中,AOP通常通过使用框架如Spring来实现。
王也518
2024/04/22
1.3K0
Spring核心之面向切面编程AOP
第三参数,实现这个接口InvocationHandler,创建代理对象,写增强的部分
用户9615083
2022/12/25
3800
Spring核心之面向切面编程AOP
Spring-aop面向切面
        1)Advice,通知/增强:类方法中提出来的共性功能(大白话就是提出来的重复代码)         2)Pointcut,切入点/切点:通知返回的方法         3)连接点:方法         4)织入:运行时通知插入到方法的过程         5)aspect,切面:通知功能在什么时候插入到切入点(通知和切入点的结合)         6)目标对象:被增强的对象         7)代理:应用切面的过程(AOP框架使用代理模式创建对象,实现在连接处插入增强)
chao超的搬运文章
2023/10/15
1510
Spring-aop面向切面
Spring AOP:面向切面编程的利器
总之,Spring AOP是一种非常强大的编程技术,它可以帮助我们实现代码的解耦和复用,提高代码的可维护性和可扩展性。
小小程序员
2023/03/19
3860
Spring AOP:面向切面编程的利器
Spring AOP 面向切面编程
先说一下 Spring框架已经继承了,不用我们手动去写 动态代理的实现方式,但是我们也要了解一下
收心
2022/01/17
3440
Spring AOP 面向切面编程
再学习之Spring(面向切面编程).
一、概念 1、理论     把横切关注点和业务逻辑相分离是面向切面编程所要解决的问题。如果要重用通用功能的话,最常见的面向对象技术是继承(inheritance)或 组成(delegation)。但是,如果在整个应用中都使用相同的基类,继承往往会导致一个脆弱的对象体系;而使用组成可能需要对委托对象进行复杂的调用。切面提供了取代继承和委托的另一种可选方案,而且在很多场景下更清晰简洁。Spring AOP 基于动态代理,所以Spring只支持方法连接点,这与一些其他的AOP框架是不同的,例如AspectJ和JB
JMCui
2018/03/16
7700
再学习之Spring(面向切面编程).
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
@PropertySouce是spring3.1开始引入的基于java config的注解。
张哥编程
2024/12/13
1270
JAVAEE框架整合技术之Spring02-AOP面向切面编程技术
Spring使用注解配置依赖注入
大部分情况下,使用Spring配置依赖注入时,都是使用注解来进行配置,因为注解比xml要方便和简单。不过类似于数据源对象这种配置信息容易变更的对象除外,这种对象使用xml文件来进行配置会更适合,方便于在外部进行修改,而不需要打开代码来进行修改。
端碗吹水
2020/09/23
9650
什么是AOP面向切面编程?怎么简单理解?
面向切面编程(AOP)通过将横切关注点(cross-cutting concerns)分离出来,提供了一种增强代码模块化和可维护性的方法。
张飞的猪
2024/11/06
1270
什么是AOP面向切面编程?怎么简单理解?
Spring对JDBC的模板支持——JdbcTemplate
Spring的JdbcTemplate是一个对JDBC的模板封装,它提供了一套JDBC的模板,能让我们写持久层代码时减少多余的代码,简化JDBC代码,使代码看起来更简洁。在介绍Spring的JdbcTemplate使用方法之前我们先来讨论一个问题,以下这是一段常见的往数据库写入数据的JDBC代码:
端碗吹水
2020/09/23
6820
Spring AOP(面向切面编程)
Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。通常情况下,AOP把项目中需要在多处用到的功能,比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。
SuperHeroes
2019/03/12
6450
Spring 框架学习(六)面向切面编程 AOP
在软件开发中散布于应用中多处的功能被称为横切关注点(crossing-cutting concern)。通常这也横切关注点一般是与业务逻辑相分离的。而面向切面编程将会解决如何将横切关注点与与业务逻辑分离的问题。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nRIEcgxi-1571404087194)(en-resource://database/9500:1)] 横切关注点往往是影响应用多处的功能
求和小熊猫
2020/11/25
3560
面向切面的Spring
  本文是博主在看完面向切面的Spring(《Spring实战》第4章)后的一些实践笔记。   为什么要用AOP呢?作者在书中也明确提到了,使用AOP,可以让代码逻辑更多的去关注自己本身的业务,而不用混杂和关注一些其它的东西。包括:安全,缓存,事务,日志等等。
happyJared
2018/09/20
4480
面向切面的Spring
相关推荐
《Spring实战》读书笔记-第4章 面向切面的Spring
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档