使用 WordPress 和 React 为您的 Web 应用程序创建无头 CMS

已发表: 2020-02-18
无头 wordpress
关注@Cloudways

WordPress Rest API 是 WordPress 提供的众多强大功能之一。 它使开发人员能够创建引人入胜的插件和主题,并允许他们使用 WordPress CMS 为第三方应用程序提供支持。

在现代 Web 应用程序中,还开发了内容管理系统来管理网站的内容。 这会给开发人员增加额外的工作量。 由于Rest API提供了如此多的可能性,人们还可以将 WordPress 与 React 结合使用,作为基于 JavaScript 的 Web 应用程序的无头 CMS。

  • 什么是无头 CMS
  • 使用 Headless WordPress CMS 的好处
  • 设置 WordPress 网站
  • React 入门

那么无头 WordPress 到底是什么?

成为“无头”绝对不意味着 CMS 缺少标题部分。 这意味着您可以将 CMS 用作通用内容管理系统,而不管用于构建前端的技术如何。

只要使用相同的 JSON 语言,Rest API 就允许开发人员与跨技术接口交互。 WordPress Rest API 以 JSON 格式输出数据,这可以被大量 Web 技术理解。 JSON 是 JavaScript 对象的基于文本的表示形式,其中包含键值对中的数据。

 “朋友们”: [
      {
        “身份证”:0,
        “名称”:“哈丽特·斯坦利”
      },
      {
        “身份证”:1,
        "name": "本顿奥多姆"
      },
      {
        “身份证”:2,
        “姓名”:“杰基·爱德华兹”
      }
    ],

今天,我将展示WordPress Rest API的强大功能,将其与 React 和WordPress一起用作我的基本 Web 应用程序的无头 CMS。

使用 Headless WordPress CMS 的好处

作为一个开源平台; WordPress 为创建任何类型的网站提供了极大的灵活性。 将 WordPress 用作无头 CMS,您可以使用任何 Web 技术创建 Web 应用程序的前端,并使用最流行的 CMS 之一管理其内容。

您可能会遇到需要在使用 React 或 Angular 构建的现有 Web 应用程序中添加博客功能的情况。 而不是在原生框架中编写成熟的内容管理系统; 使用无头 WordPress CMS 使用 Rest API 管理内容。

设置 WordPress 网站

让我们从设置 WordPress 站点开始,因为这将充当我们前端 React 应用程序的数据源。

从 git 下载WP-Rest API插件的 zip 文件,并将 zip 文件夹上传到您的 WordPress 插件文件夹中。 文件上传后,激活插件。 这将在您的 WordPress 网站内启用 WordPress Rest API。

现在,转到设置 → 固定链接,然后选择帖子名称或自定义结构。

wordpress 永久链接

由于我们正在处理 API 调用,因此请下载Postman的 chrome 扩展。 在 Postman 中,按以下格式输入 URL:

https://example.com/wp-json/wp/v2/posts

上面的 URL 将获取您的 WordPress 站点内的帖子数据。

源代码

下载用于创建自定义帖子类型自定义帖子类型 UI插件。 当我们在下一步中将 WordPress 与 React 结合使用时,将显示此自定义帖子。

自定义帖子类型 UI

安装并激活插件并继续添加新的帖子类型。 在本教程中,我将为图书创建自定义帖子类型。

CPT 界面设置

在 Post Type Slug 中,键入自定义帖子的名称。

自定义帖子 UI api 设置

确保在 REST API显示复选框设置为true并且还设置了 REST API base slug。 如果您希望将 WordPress 用作无头 CMS,这是强制性的。

自定义帖子类型支持列表

选中您希望从 REST API 获取的信息的所有框。

保存更改后,您会注意到侧栏中填充了一个新选项。 单击它以在您的自定义帖子类型中添加新书。

我通过放入示例数据以及我的帖子摘录来创建我的第一本书。

要通过 API 验证数据是否可用,请继续点击 Postman 中的 URL。

现在,URL看起来应该像https://exampe.com/wp-json/wp/v2/

我们还可以使用ACFACF 向 RestAPI插件添加更多字段,例如 Publisher。

提前自定义字段

安装并激活这两个插件。

acf 休息 api

默认情况下,ACF 不与 WordPress Rest API 对话,因此,我们还需要下载ACF REST API插件。

添加 wordpress 自定义字段

通过使用自定义字段插件,我将为我的图书添加 Publisher 字段。

确保从列表中选择所需的帖子类型。 之后点击“发布”。

在我的自定义帖子类型中填充了一个新字段,我可以在其中定义我的书的出版商。 这就是我们设置 WordPress 以将数据发送到 ReactJS Web 应用程序所需要做的全部工作。

Cloudways 上的 WordPress 网站速度提高 300 倍

使用我们的免费迁移插件将其移至 Cloudways

免费开始!

React 入门

什么是 ReactJS

React 是一个由 Facebook 和开发者社区维护的网络 JavaScript 库。 JavaScript 是一个强大的 Web 开发工具,有几个用 JavaScript 编写的库可以增强网站的功能。 ReactJS 主要用于开发快速、健壮和动态的单页应用程序。

设置 React 应用程序

要使用 React 构建应用程序,您需要在您的计算机上安装以下依赖项。

  • NodeJS 和 NPM。
  • 文本编辑器,例如 Sublime 或 Visual Studio Code。
  • 用于版本控制的 Git(可选)

环境搭建好后,打开命令行,运行以下代码,使用ReactJS创建项目。

 npx create-react-app 前端

创建应用程序后, cd(更改目录)到应用程序文件夹并键入以下命令以安装用于 API 调用的Axios包。

 npm 和 axios

现在,打开您最喜欢的文本编辑器中的文件夹。 我正在使用 Visual Studio 代码。

通过运行命令 npm start 启动应用程序。

如果一切正常,我们就可以使用 WordPress 作为无头 CMS 使用 React 构建我们的 Web 应用程序。

src文件夹中创建一个新文件夹 ' components ',并在 ' components ' 文件夹中创建一个新文件 ' Books.js '。

在 ReactJS 上渲染 Post 数据

Book.js文件中,我们将从 WordPress Rest API 获取数据。 下面是请求 Rest API 端点的代码——在我的例子中是“ /books ”——并以 JSON 格式显示数据。

 从“反应”导入反应,{ 组件}
从 'axios' 导入 axios;

导出类书籍扩展组件{
   状态 = {
       书籍:[],
       isLoaded: 假
   }

 组件DidMount(){
   axios.get('https://wordpress-179008-1030625.cloudwaysapps.com//wp-json/wp/v2/books/')
       .then(res => this.setState({
           书籍:res.data,
           isLoaded: 真
       }))
       .catch(err => console.log(err))
   }


   使成为() {
      控制台日志(这个状态);
       返回 (
           <div>
              
           </div>
       )
   }
}

导出默认图书

上面的代码将在控制台中显示数据数组,然后在渲染块内使用。

现在,在App.js文件中调用Books组件,如下所示。

 从“反应”导入反应;
导入'./App.css';
从“./components/Books”导入书籍;

功能应用(){
 返回 (
   <div className="应用程序">
    <书籍/>
   </div>
 );
}

导出默认应用程序;

App.js是我们 Web 应用程序的入口点,因此,引用此文件中的“Books”组件很重要。

在 ReactJS 上显示发布数据

可以通过在render 方法中添加代码来显示数据。

 使成为() {
       const {books, isLoaded} = this.state;
       返回 (
           <div>
               {书。地图(书=>
               <h4>{book.title.rendered}</h4>
               )}
           </div>
       );
   }

我们将创建一个新组件并将其命名为“ BookItems.js ”,而不是在此处显示数据,因为我希望将其与父组件分开。

Bookk.js 中的 render 方法更改为:

 使成为() {
       const {books, isLoaded} = this.state;
       返回 (
           <div>
               {书。地图(书=>
               <BookItems key={book.id} book={book}/>
               )}
           </div>
       );
   }

现在,我们需要渲染 BookItems 组件。

BookItems.js 中添加以下代码:

 导入 React, { Component } from 'react'
从 'axios' 导入 axios;
从 'prop-types' 导入 PropTypes;

导出类 BookItems 扩展组件 {
 
   使成为() {
       const { title } = this.props.book;
       返回 (
           <div>
              <h2>{title.rendered}</h2>
           </div>
       )
   }
}

导出默认 BookItems

在上面的代码中,我引用了 book 属性来获取标题和其他信息。

注意:确保引用“Books”组件中的BookItems组件。

我的BookItems.js最终版本如下所示:

 从“反应”导入反应,{ 组件}
从 'prop-types' 导入 PropTypes;
从 'axios' 导入 axios;
导出类 BookItems 扩展组件 {

   状态 = {
       imgUrl: '',
       作者: '',
       isLoaded: 假
   }

   静态 propTypes = {
       书:PropTypes.object.isRequired
   }

   组件DidMount(){
       const {featured_media, author} = this.props.book;
       const getImageUrl = axios.get(`https://wordpress-179008-1030625.cloudwaysapps.com//wp-json/wp/v2/media/${featured_media}`);
       const getAuthor = axios.get(`https://wordpress-179008-1030625.cloudwaysapps.com//wp-json/wp/v2/users/${author}`);
      
       Promise.all([getImageUrl, getAuthor]).then(res => {

           控制台日志(res);
           this.setState({
               imgUrl: res[0].data.media_details.sizes.full.source_url,
               作者: res[1].data.name,
               isLoaded: 真

           });
       });
    }
 
   使成为() {
       const { 标题,摘录} = this.props.book;
       const {author, imgUrl, isLoaded} = this.state;
       返回 (
           <div>
              <h2>{title.rendered}</h2>
              <img src={imgUrl} alt={title.rendered}/>
              <strong>{作者}</strong><br/>
              <div risklySetInnerHTML={{__html: excerpt.rendered}}></div>
           </div>
       )
   }
}

导出默认 BookItems

浏览器中的输出如下所示:

不是最漂亮的吧? 嗯,那是因为样式超出了本教程的范围。

包起来!

今天,我向您展示了如何将 WordPress 与 React 一起用作 Web 应用程序的无头 CMS。 你也可以在 Git 上下载 React 代码。 但是,它不仅限于 React。 您还可以尝试使用 VueJS、Angular 或任何 JavaScript 框架。 您可以使用 WordPress Rest API 做很多事情。 天无绝人之路,所以继续为您的下一个 Web 项目使用 WordPress。

问:什么是无头 WordPress?

当 WordPress 用作 CMS 仅管理解耦的前端 Web 应用程序的内容时; 它被称为 WordPress 无头 CMS。

问:什么是 React?

React 是一个由 Facebook 和社区开发人员维护的 JavaScript 库。 它用于构建现代 Web 应用程序的用户界面。

问:您可以将 React 与 WordPress 一起使用吗?

是的,React 可以与 WordPress 一起使用,如上例所示,其中使用 React 构建的前端内容由 WordPress CMS 使用 WP Rest API 进行管理。

问:WordPress 可以用作无头 CMS 吗?

WordPress 是目前最灵活的 CMS,可让您创建几乎任何类型的网站。 它的开源性质意味着您可以将 WordPress 用作无头 CMS。

问:无头 WordPress 更安全吗?

是的,在某种程度上,无头 WordPress 使您的网站更加安全,因为黑客无法访问您的后端。