使用 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 和開發者社區維護的用於 Web 的 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 中添加以下代碼:

 從“反應”導入反應,{ 組件}
從 '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 應用程序的用戶界面。

問:你可以在 WordPress 中使用 React 嗎?

是的,React 可以與 WordPress 一起使用,如上例所示,其中使用 React 構建的前端內容由 WordPress CMS 使用 WP Rest API 進行管理。

問:WordPress 可以用作無頭 CMS 嗎?

WordPress 是目前最靈活的 CMS,可讓您創建幾乎任何類型的網站。 它的開源性質意味著您可以將 WordPress 用作無頭 CMS。

問:無頭 WordPress 更安全嗎?

是的,在某種程度上,無頭 WordPress 使您的網站更加安全,因為黑客無法訪問您的後端。