Node.js和WordPress:为自定义应用程序构建动态API

为自定义应用程序构建动态API

作为一名网络开发人员,您可能对 Node.js 和 WordPress 不陌生。Node.js 是在浏览器外运行 JavaScript 的强大运行时环境,而 WordPress 则是领先的内容管理系统(CMS)

这些平台看似天壤之别 – Node.js 以 JavaScript 为骨干,WordPress 则是以 PHP 为动力的内容管理系统。不过,得益于 WordPress REST API,它们可以协同工作。该 API 使 Node.js 应用程序能够通过 HTTP 请求与 WordPress 交互。它提供了对各种数据的访问,包括用户、评论、页面、文章和其他网站元素。

但是,将 Node.js 与 WordPress 结合起来有什么好处呢?

想象一下,您有一个 WordPress 网站,并想建立一个自定义仪表板。这个仪表盘可以显示网站的实时数据,如最近的文章、评论数和用户活动。

这就是 Node.js 发挥关键作用的地方。本指南将指导您设置 Node.js 端点。这些端点利用 WordPress REST API 完成各种任务:更新文章、管理评论、网站定制和定制 WordPress 网站管理。

前提条件

要学习本指南,我们假定您已具备以下条件:

使用 Node.js 管理 WordPress 文章

在 WordPress 中,基本任务包括创建、更新和删除文章。本节将介绍如何为这些操作创建特定端点,以及如何为每个操作向 /posts 端点发出请求。

在 WordPress 中创建新文章

要使用 REST API 在 WordPress 中创建新文章,请向 /posts 端点发出 POST 请求。在请求正文中,您需要提供 JSON 格式的 WordPress 文章内容。

首先,打开 Node.js 服务器文件,文件名通常为 App.js。确保在服务器文件中正确设置了 Express。这通常是通过 const app = express() 这行来完成的,它会初始化 Express。

接下来,在服务器文件中实现一个路由,以添加新的文章。该路由的代码如下:

app.post("/add-post", async (req, res) => {
try {
const postID = req.body.id
const resp = await axios.post(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`, req.body)
if(resp.status !== 200) throw "Something went wrong"
} catch (err) {        
console.log(err)        
}
})

这段代码会在应用程序中创建一个 /add-post 端点。当向该端点发送请求时,它会从请求正文中提取文章 ID,然后向 WordPress 网站发送 POST 请求。请记得将 https://yourdomain.com 替换为您的 WordPress 域名。

您可以使用 Visual Studio Code 中的 Thunder Client 等工具进行测试。确保请求的 JSON 主体有效,以免出错。

add-post

向 /add-post 端点发出的 POST 请求的 JSON 正文

通过这种方法,可以从您的应用程序高效、自动地向 WordPress 网站发布文章。

更新 WordPress 中的现有文章

要使用 WordPress API 更新文章,请向 WordPress API 中的 /posts 端点发出 PUT 请求。您还需要以 JSON 格式提供 WordPress 文章的更新内容。

更新 WordPress 中现有文章的路径如下:

app.put("/update-post", async (req, res) => {
try {
const postID = req.body.id                    
const resp = await axios.put(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`, req.body)
if(resp.status !== 200) throw "Something went wrong"
} catch (err) {        
console.log(err)        
}
})

例如,您可以在 Thunder Client 中通过以下请求更新 WordPress 中 ID 为 3 的文章:

向 /update-post 端点发出的 PUT 请求的 JSON 正文

向 /update-post 端点发出的 PUT 请求的 JSON 正文

在 WordPress 中删除文章

要删除 WordPress 中的文章,请使用要删除文章的唯一 ID 向 /posts 端点发出 DELETE 请求。

app.delete("/delete-post", async (req, res) => {
try {
const postID = req.body.id                
const resp = await axios.delete(`https://yourdomain.com/wp-json/wp/v2/posts/${postID}`)
if(resp.status !== 200) throw "Something went wrong"
} catch (err) {        
console.log(err)        
}
})

结果应该是这样的

向 /delete-post 端点发出的 DELETE 请求的 JSON 正文

向 /delete-post 端点发出的 DELETE 请求的 JSON 正文

使用 Node.js 管理 WordPress 评论

通过 Comments API,您可以从应用程序中访问和操作 WordPress 网站上的评论。在该 API 中有一个端点,用于创建、列出、阅读、更新和删除 WordPress 网站上的评论。

假设您不希望 WordPress 网站发布包含 “Follow me” 短语的评论。在本例中,您可以使用一个 regex 表达式,在发布评论之前检查每条评论中是否包含该短语。

为此,请使用以下代码:

app.post("/add-comment", async (req, res) => {
try {
let regex = /follow me/i;    
let comment = req.body.comment                
if(regex.test(comment)) throw "Oops! Contains the forbidden word"  		
const resp = await axios.post(`https://yourdomain/wp-json/wp/v2/comments`, req.body)
if(resp.status !== 200) throw "Something went wrong"  		
} catch (err) {      
console.log(err)
}
})

通过这种方式,只有不包含 “Follow me” 短语的评论才会被发布到网站上,而像下面这样的评论则不会被发布:

向 /add-comment 端点发出的 POST 请求的 JSON 正文

向 /add-comment 端点发出的 POST 请求的 JSON 正文,不包括包含 “Follow me” 的评论。

为用户定制网站

通过存储用户偏好并确定其国家/地区,您可以为每个用户定制 WordPress 页面。

在 Node.js 中,您可以在后台应用程序的登录或注册路径中将用户数据存储在 Cookie 中,并将 Cookie 放在用户的网络浏览器中,如图所示:

app.post("/sign-up", async (req, res) => {
// Sign up user
res.cookie("cookie_id", 123456)
res.cookie("lang", req.body.language)
res.status(200).json("Logged in.")
})

注册时,您会获取用户的首选语言,并将其连同 cookie_id 作为 cookie 发送到浏览器。

现在,有了浏览器中存储的语言,您就可以用它来获取用户语言的 WordPress 文章。这需要您先翻译 WordPress 中的文章。一个简单的方法是在 WordPress 网站中集成 WPML 和 Yoast SEO

集成后,将为其他语言创建不同的子文件夹:

  • mydomain.com/en/
  • mydomain.com/es/
  • mydomain.com/fr/

在获取 WordPress 文章时,您可以获取用户首选语言的文章列表,因为该语言已存储在 cookie 中。

app.get("/get-posts", async (req, res) => {
try { 
const lang = req.cookies.lang
const resp = await axios.get(`https://mydomain.com/${lang}/wp-json/wp/v1/posts`)
if(resp.status !== 200) throw "Something went wrong"
} catch (err) {        
console.log(err)        
}
})

这样,您就能根据用户注册时指定的语言获得文章列表。

使用自定义管理

通过扩展用户端点,您可以建立一个自定义管理面板来控制 WordPress 用户、角色和权限。通过 Users API,您可以从功能类似于评论 API 的应用程序中访问和操作 WordPress 网站上的用户信息。

例如,如果您想将某个用户的角色更新为 “Administrator”,可以使用以下路径:

app.put("/update-user", async (req, res) => {
try {
const userID = req.body.id                
const resp = await axios.put(`https://yourdomain/wp-json/wp/v2/users/${userID}`, req.body)
if(resp.status !== 200) throw "Something went wrong"
} catch (err) {        
console.log(err)        
}
})

在请求中,传递一个包含要更新记录的用户 ID 和新详细信息的对象。

向 /update-user 端点发出的 PUT 请求的 JSON 正文

向 /update-user 端点发出的 PUT 请求的 JSON 正文

当您完成 Node.js 服务器的开发后。您可以将其轻松托管到应用程序托管服务器上。

小结

将 Node.js 与您的 WordPress 网站集成,可以实现更多功能。您可以更新文章、管理评论、设置用户角色,并根据用户所在国家添加自定义功能。

除了我们已经介绍过的功能外,您还可以添加高级搜索、主题操作和文章修订功能。请立即查看 REST API 手册并开始探索。

评论留言