作为一名网络开发人员,您可能对 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 的基础知识。
- 计算机上安装了 Node.js 和 npm。
- 已安装 WordPress 和 Thunder Client VS Code 扩展。
使用 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 端点发出的 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 正文
在 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 正文
使用 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 正文,不包括包含 “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 正文
当您完成 Node.js 服务器的开发后。您可以将其轻松托管到应用程序托管服务器上。
小结
将 Node.js 与您的 WordPress 网站集成,可以实现更多功能。您可以更新文章、管理评论、设置用户角色,并根据用户所在国家添加自定义功能。
除了我们已经介绍过的功能外,您还可以添加高级搜索、主题操作和文章修订功能。请立即查看 REST API 手册并开始探索。
原文地址:https://www.wbolt.com/node-js-wordpress.html