如何構建一個無頭WooCommerce電商網站

如何構建一個無頭WooCommerce電商網站

WooCommerce 是用於構建電子商務應用程式的最流行的 WordPress 外掛之一。除了在傳統的 WordPress 應用程式中使用 WooCommerce 外,您還可以將其用作無頭解決方案。

本文將教你如何使用部署的 React 構建無頭 WooCommerce 應用程式。

無頭 WooCommerce 簡介

術語 “無頭電子商務” 是指電子商務應用程式的後臺(頭)與前臺(體)分離。無頭架構通過 API 在電子商務解決方案的展示層(前端)和應用層(後端)之間傳遞請求。

應用程式介面(API)定義了中間層之間的互動,允許企業在不影響應用層功能的情況下更改表現層,並更新、編輯或新增產品到多個應用層。

在無頭 WooCommerce 應用程式中,WooCommerce API 就是一箇中介,提供前臺和後臺之間的通訊。除了上述優點外,這還支援靈活、可擴充套件的前端開發,使您能夠專注於使用 ReactVue 等現代技術棧製作引人入勝的動態使用者介面。

此外,使用無頭 WooCommerce 還能幫助您適應不斷變化的客戶需求和技術進步,從而使電子商務基礎架構面向未來。您可以毫不費力地更新前端元件,同時確保後臺 WooCommerce 平臺的穩定性和可靠性。

傳統的電子商務應用程式和無頭 WooCommerce 應用程式

傳統的電子商務應用程式和無頭 WooCommerce 應用程式。

與傳統的 WordPress 電子商務設定相比,這種現代方法具有眾多優勢。

既然你已經瞭解了什麼是無頭 WooCommerce 應用程式及其優勢,那麼是時候為自己建立一個了。使用 WordPress、React 和 WooCommerce 外掛,您將建立一個電子商務應用程式並將其部署到伺服器上。

先決條件

在開始之前,請確保您具備以下條件:

無頭 WooCommerce 的優勢

當您為自己的 WooCommerce 應用程式選擇無頭路徑時,您將獲得一系列好處,尤其是讓一個後臺支援您應用程式的各種前端的靈活性。

以下是無頭 WooCommerce 的其他一些優勢:

  • 增強了定製功能 – 您可以使用任何網路框架,隨心所欲地構建您的 WooCommerce 應用程式。
  • 提高網站效能 – 您可以利用 React 和 Vue 等快速網路框架來顯著提高網站效能。
  • 搜尋引擎優化優勢 – 您可以更靈活地控制搜尋引擎優化策略,從而實現業務目標。
  • 更好的可擴充套件性 – 您的網站可以更有效地擴充套件,即使在高流量期間也能確保效能流暢。
  • 創造獨特客戶體驗的能力 – 您可以擺脫傳統模板的束縛。您可以為客戶打造創新的個性化體驗。

設定無頭 WooCommerce 網站

以下是設定 WooCommerce 網站的分步指南:

  1. 登入 MyKinsta 面板
  2. 導航至新增 Add Service > WordPress site
  3. 選擇 Install WordPress 選項。
  4. Add new WordPress site 頁面,填寫安裝 WordPress 所需的欄位。
  5. 在單擊 “Continue” 之前,選中 “Install WooCommerce” 框。

安裝 WordPress 和 WooCommerce 外掛

安裝 WordPress 和 WooCommerce 外掛。

啟用 WooCommerce 外掛

  1. 在 MyKinsta 控制面板上,單擊側邊欄上的 “Domains“。
  2. 在 “Domains” 頁面上,單擊 “Open WordPress Admin“。
  3. 登入 WordPress 管理面板,導航至外掛,選擇 WooCommerce 外掛並將其啟用。

啟用 WooCommerce 外掛

啟用 WooCommerce 外掛。

注:如果您使用的是 Kinsta,安裝過程中不會要求您提供檔案傳輸協議(FTP)的詳細資訊。但是,如果您使用本地安裝的 WordPress,則必須提供 FTP 詳細資訊。繼續為無頭操作配置 WooCommerce 外掛。

為無頭操作配置 WooCommerce

配置 WooCommerce 為無頭操作:

  1. 登入 WordPress 管理儀表板。在側邊欄上,單擊 WooCommerce > Settings
  2. 在 “Settings” 頁面上,單擊 “Advanced” 選項卡。然後,單擊 Rest API
  3. 現在點選 Add key。為 REST API 新增金鑰:為 REST API 新增金鑰
  4. 單擊 Create an API key。給新的 REST API 新增描述,將 Permissions 欄位設定為 “Read/Write“,然後單擊 “Generate API key“。生成 WooCommerce API 金鑰:
    生成 WooCommerce API 金鑰
  5. 複製消費者金鑰和祕密,並將它們安全地儲存起來,以便在 React 應用程式中使用。
  6. 最後,調整固定連結結構,確保在請求 API 時返回 JSON 資料。在 WordPress 管理儀表板上,單擊”設定“>”固定連結“,然後選擇 “文章名“。

在繼續之前,請為您的 WooCommerce 商店新增一些產品。導航至 WordPress 面板中的 WooCommerce 部分,點選產品,然後根據提示新增產品。您也可以為您的商店匯入這些示例產品

安裝好 WordPress 和 WooCommerce 後,你就可以專注於無頭電子商務應用的前端了。

設定 React 專案

下面介紹如何建立 React 專案:

  1. 在首選目錄中,使用以下命令建立 React 專案:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    # Remember to replace <app-name> with your preferred name
    # With npx
    npx create-react-app <app-name> && cd <app-name>
    # With yarn
    yarn create react-app <app-name> && cd <app-name>
    # Remember to replace <app-name> with your preferred name # With npx npx create-react-app <app-name> && cd <app-name> # With yarn yarn create react-app <app-name> && cd <app-name>
    # Remember to replace <app-name> with your preferred name
    # With npx
    npx create-react-app <app-name> && cd <app-name>
    # With yarn
    yarn create react-app <app-name> && cd <app-name>
  2. 建立專案後,在專案根目錄下建立一個 .env 檔案,並新增以下內容:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    REACT_APP_CONSUMER_KEY=your_Woocommerce_consumer_key
    REACT_APP_CONSUMER_SECRET=your_Woocommerce_consumer_secret
    REACT_APP_CONSUMER_KEY=your_Woocommerce_consumer_key REACT_APP_CONSUMER_SECRET=your_Woocommerce_consumer_secret
    REACT_APP_CONSUMER_KEY=your_Woocommerce_consumer_key
    REACT_APP_CONSUMER_SECRET=your_Woocommerce_consumer_secret

    將其替換為之前生成的 WooCommerce 消費者金鑰和私鑰。

  3. 接下來,使用下面的命令安裝用於管理路由的包:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    ## With npm
    npm i react-router-dom
    ## With yarn
    yarn add react-router-dom
    ## With npm npm i react-router-dom ## With yarn yarn add react-router-dom
    ## With npm
    npm i react-router-dom
    ## With yarn
    yarn add react-router-dom
  4. 最後,使用以下命令啟動 React 專案:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    ## With npm
    npm start
    ## With yarn
    yarn start
    ## With npm npm start ## With yarn yarn start
    ## With npm
    npm start
    ## With yarn
    yarn start

為您的無頭 WooCommerce 網站開發前端

一個成功的電子商務商店應展示產品並方便購買。首先要在前端顯示 WooCommerce 商店中的產品。這需要向 WooCommerce API 發起請求。

列出所有產品的端點是 wp-json/wc/v3/products 。必須將此端點新增到主機 URL 中。在您的 .env 檔案中為基礎 URL 新增此變數,基礎 URL 就是附加了 products 端點的主機 URL。使用您的 WooCommerce 網站域名更新 http://example.com

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
REACT_APP_BASE_URL=http://example.com/wp-json/wc/v3/products
REACT_APP_BASE_URL=http://example.com/wp-json/wc/v3/products
REACT_APP_BASE_URL=http://example.com/wp-json/wc/v3/products

在進行 API 請求時,必須在 URL 中包含使用者金鑰和祕密。合併後的 URL 如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
https://yourdomain.com/wp-json/wc/v3/products?consumer_key=your_consumer_key&consumer_secret=your_consumer_secret
https://yourdomain.com/wp-json/wc/v3/products?consumer_key=your_consumer_key&consumer_secret=your_consumer_secret
https://yourdomain.com/wp-json/wc/v3/products?consumer_key=your_consumer_key&consumer_secret=your_consumer_secret

讓我們在 React 應用程式中使用 Fetch API 發起 API 請求,以獲取 WooCommerce 產品。

  1. 在 React 應用程式中,開啟 src 目錄中的 App.js 檔案,並用下面的程式碼替換其內容:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    import {Link} from 'react-router-dom';
    import {useEffect, useState} from 'react';
    function App() {
    const BASE_URL = process.env.REACT_APP_BASE_URL;
    const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY;
    const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET;
    const [products, setProducts] = useState([]);
    const [loading, setLoading] = useState(true);
    useEffect(() => {
    const fetchProducts = async () => {
    const response = await fetch(`${BASE_URL}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}`);
    const data = await response.json();
    setProducts(data);
    setLoading(false);
    };
    fetchProducts();
    }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET]);
    return loading ? (
    <div className="loaderText">
    <h2>Just a moment. Fetching products...</h2>{' '}
    </div>
    ) : (
    <ul>
    {products ? (
    products.map((product) => (
    <li key={product.id}>
    <Link to={`/product/${product.id}`}>
    <img src={product.images[0].src} alt="Product banner"/>
    <h2>{product.name}</h2>
    <p>Sale price: {product.sale_price}</p>
    <strong>
    {product.stock_status === 'instock'
    ? 'In stock'
    : 'Out of stock'}
    </strong>
    <button>Add to Cart</button>
    </Link>
    </li>
    ))
    ) : (
    <li>No products found</li>
    )}
    </ul>
    );
    }
    export default App;
    import {Link} from 'react-router-dom'; import {useEffect, useState} from 'react'; function App() { const BASE_URL = process.env.REACT_APP_BASE_URL; const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY; const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET; const [products, setProducts] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const fetchProducts = async () => { const response = await fetch(`${BASE_URL}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}`); const data = await response.json(); setProducts(data); setLoading(false); }; fetchProducts(); }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET]); return loading ? ( <div className="loaderText"> <h2>Just a moment. Fetching products...</h2>{' '} </div> ) : ( <ul> {products ? ( products.map((product) => ( <li key={product.id}> <Link to={`/product/${product.id}`}> <img src={product.images[0].src} alt="Product banner"/> <h2>{product.name}</h2> <p>Sale price: {product.sale_price}</p> <strong> {product.stock_status === 'instock' ? 'In stock' : 'Out of stock'} </strong> <button>Add to Cart</button> </Link> </li> )) ) : ( <li>No products found</li> )} </ul> ); } export default App;
    import {Link} from 'react-router-dom';
    import {useEffect, useState} from 'react';
    function App() {
    const BASE_URL = process.env.REACT_APP_BASE_URL;
    const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY;
    const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET;
    const [products, setProducts] = useState([]);
    const [loading, setLoading] = useState(true);
    useEffect(() => {
    const fetchProducts = async () => {
    const response = await fetch(`${BASE_URL}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}`);
    const data = await response.json();
    setProducts(data);
    setLoading(false);
    };
    fetchProducts();
    }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET]);
    return loading ? (
    <div className="loaderText">
    <h2>Just a moment. Fetching products...</h2>{' '}
    </div>
    ) : (
    <ul>
    {products ? (
    products.map((product) => (
    <li key={product.id}>
    <Link to={`/product/${product.id}`}>
    <img src={product.images[0].src} alt="Product banner"/>
    <h2>{product.name}</h2>
    <p>Sale price: {product.sale_price}</p>
    <strong>
    {product.stock_status === 'instock'
    ? 'In stock'
    : 'Out of stock'}
    </strong>
    <button>Add to Cart</button>
    </Link>
    </li>
    ))
    ) : (
    <li>No products found</li>
    )}
    </ul>
    );
    }
    export default App;

    這段程式碼會在元件掛載(useEffect 鉤子)時使用 Fetch API 從 WooCommerce API 端點獲取產品列表。端點 URL 是使用之前設定的環境變數構建的。

    獲取資料後,它會使用 setProducts(response) 更新元件狀態(products),並使用 setLoading(false) 將 loading 設定為 false

    在獲取資料時,會顯示一條載入資訊。一旦獲取資料並將 loading 設定為 false,就會對映 products 陣列,並使用 JavaScript XML (JSX) 呈現產品專案列表。每個產品專案都封裝在一個來自 react-router-domLink 元件中,該元件會根據 ID 生成一個指向單個產品詳細資訊頁面的連結。

    每個產品都會顯示產品名稱、價格、描述(使用 dangerouslySetInnerHTML 注入 HTML 內容)、庫存狀態和一個按鈕。

  2. src 目錄中開啟 index.js 檔案,將程式碼替換為以下程式碼段:
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    import React from "react";
    import ReactDOM from "react-dom";
    import { BrowserRouter, Route, Routes } from "react-router-dom";
    import "./index.css";
    import App from "./App";
    ReactDOM.render(
    <React.StrictMode>
    <div className="container">
    <header>
    <h1>Kinsta Store</h1>
    </header>
    <BrowserRouter>
    <Routes>
    <Route exact path="/" element={<App />} />
    </Routes>
    </BrowserRouter>
    </div>
    </React.StrictMode>,
    document.getElementById("root")
    );
    import React from "react"; import ReactDOM from "react-dom"; import { BrowserRouter, Route, Routes } from "react-router-dom"; import "./index.css"; import App from "./App"; ReactDOM.render( <React.StrictMode> <div className="container"> <header> <h1>Kinsta Store</h1> </header> <BrowserRouter> <Routes> <Route exact path="/" element={<App />} /> </Routes> </BrowserRouter> </div> </React.StrictMode>, document.getElementById("root") );
    import React from "react";
    import ReactDOM from "react-dom";
    import { BrowserRouter, Route, Routes } from "react-router-dom";
    import "./index.css";
    import App from "./App";
    ReactDOM.render(
    <React.StrictMode>
    <div className="container">
    <header>
    <h1>Kinsta Store</h1>
    </header>
    <BrowserRouter>
    <Routes>
    <Route exact path="/" element={<App />} />
    </Routes>
    </BrowserRouter>
    </div>
    </React.StrictMode>,
    document.getElementById("root")
    );

    當瀏覽器呼叫 / 路由時,它會渲染 App 元件。

  3. 執行應用程式檢視更改。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    ## With npm
    npm start
    ## With yarn
    yarn start
    ## With npm npm start ## With yarn yarn start
    ## With npm
    npm start
    ## With yarn
    yarn start

    React 應用程式現在可以顯示 WooCommerce 商店的產品列表。

    WooCommerce 商店的產品列表

建立動態產品頁面

現在,為了增強使用者體驗,請使用 WooCommerce API 建立動態產品頁面。該 API 提供了一個用於獲取單個產品資料的端點: wp-json/wc/v3/products/<id>。要使用該端點獲取並顯示商店中單個產品的資料,請按照以下步驟操作:

  1. src 目錄中建立一個元件 ProductDetail.js,用於獲取和顯示有關單個產品的資料。該元件可獲取並顯示單個產品的詳細資訊。其操作方式與 App.js 檔案中的程式碼類似,只是它獲取的是單個產品的詳細資訊。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    import {useState, useEffect} from 'react';
    import {useParams} from 'react-router-dom';
    function ProductDetail() {
    const BASE_URL = process.env.REACT_APP_BASE_URL;
    const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY;
    const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET;
    const {id} = useParams();
    const [product, setProduct] = useState(null);
    useEffect(() => {
    const fetchSingleProductDetails = async () => {
    const response = await fetch(
    `${BASE_URL}/${id}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}`
    );
    const data = await response.json();
    setProduct(data);
    };
    fetchSingleProductDetails();
    }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET, id]);
    if (!product) {
    return (
    <div className="loaderText">
    <h2>Fetching product details...</h2>
    </div>
    );
    }
    return (
    <div className="product-detail">
    <h2>{product.name}</h2>
    <h4>Original Price: {product.regular_price}</h4>
    <h4>Sale price: {product.sale_price}</h4>
    <img src={product.images[0].src} alt="Product banner"/>
    <strong>
    {product.stock_status === 'instock' ? 'In stock' : 'Out of stock'}
    </strong>
    </div>
    );
    }
    export default ProductDetail;
    import {useState, useEffect} from 'react'; import {useParams} from 'react-router-dom'; function ProductDetail() { const BASE_URL = process.env.REACT_APP_BASE_URL; const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY; const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET; const {id} = useParams(); const [product, setProduct] = useState(null); useEffect(() => { const fetchSingleProductDetails = async () => { const response = await fetch( `${BASE_URL}/${id}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}` ); const data = await response.json(); setProduct(data); }; fetchSingleProductDetails(); }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET, id]); if (!product) { return ( <div className="loaderText"> <h2>Fetching product details...</h2> </div> ); } return ( <div className="product-detail"> <h2>{product.name}</h2> <h4>Original Price: {product.regular_price}</h4> <h4>Sale price: {product.sale_price}</h4> <img src={product.images[0].src} alt="Product banner"/> <strong> {product.stock_status === 'instock' ? 'In stock' : 'Out of stock'} </strong> </div> ); } export default ProductDetail;
    import {useState, useEffect} from 'react';
    import {useParams} from 'react-router-dom';
    function ProductDetail() {
    const BASE_URL = process.env.REACT_APP_BASE_URL;
    const CONSUMER_KEY = process.env.REACT_APP_CONSUMER_KEY;
    const CONSUMER_SECRET = process.env.REACT_APP_CONSUMER_SECRET;
    const {id} = useParams();
    const [product, setProduct] = useState(null);
    useEffect(() => {
    const fetchSingleProductDetails = async () => {
    const response = await fetch(
    `${BASE_URL}/${id}?consumer_key=${CONSUMER_KEY}&consumer_secret=${CONSUMER_SECRET}`
    );
    const data = await response.json();
    setProduct(data);
    };
    fetchSingleProductDetails();
    }, [BASE_URL, CONSUMER_KEY, CONSUMER_SECRET, id]);
    if (!product) {
    return (
    <div className="loaderText">
    <h2>Fetching product details...</h2>
    </div>
    );
    }
    return (
    <div className="product-detail">
    <h2>{product.name}</h2>
    <h4>Original Price: {product.regular_price}</h4>
    <h4>Sale price: {product.sale_price}</h4>
    <img src={product.images[0].src} alt="Product banner"/>
    <strong>
    {product.stock_status === 'instock' ? 'In stock' : 'Out of stock'}
    </strong>
    </div>
    );
    }
    export default ProductDetail;
  2. index.js 中建立新路由,併為其分配 ProductDetail 元件。此程式碼片段在 index.js 中建立一個新路由,併為其分配 ProductDetail 元件。這樣,當使用者點選產品連結時,就會被引導到相應的產品頁面。
    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    // index.js
    import ProductDetail from "./ProductDetail";
    ReactDOM.render(
    <React.StrictMode>
    <Router>
    <Routes>
    <Route exact path="/" element={<App />} />
    {/* the new route */}
    <Route path="/product/:id" element={<ProductDetail />} />
    </Routes>
    </Router>
    </div>
    </React.StrictMode>,
    document.getElementById("root")
    );
    // index.js … import ProductDetail from "./ProductDetail"; ReactDOM.render( <React.StrictMode> … <Router> <Routes> <Route exact path="/" element={<App />} /> {/* the new route */} <Route path="/product/:id" element={<ProductDetail />} /> </Routes> </Router> </div> </React.StrictMode>, document.getElementById("root") );
    // index.js
    …
    import ProductDetail from "./ProductDetail";
    ReactDOM.render(
    <React.StrictMode>
    …
    <Router>
    <Routes>
    <Route exact path="/" element={<App />} />
    {/* the new route */}
    <Route path="/product/:id" element={<ProductDetail />} />
    </Routes>
    </Router>
    </div>
    </React.StrictMode>,
    document.getElementById("root")
    );

    通過這些修改,點選應用程式中的任何產品都會將使用者重定向到一個頁面,顯示該特定產品的詳細資訊。服裝產品的詳細資訊:

     

    服裝產品的詳細資訊

您可以訪問 GitHub 程式碼庫中的完整程式碼。

在無頭設定中整合關鍵的 WooCommerce 功能

您可以在無頭 WooCommerce 應用程式中列出產品的基礎上,整合以下基本功能:

  • 購物車 – 在客戶端管理購物車資料,或使用本地儲存,讓使用者可以無縫新增、刪除和更新商品。
  • 結賬流程 – 使用 React 元件設計簡化的結賬流程,收集必要資訊,驗證使用者輸入,確保流暢的結賬體驗。
  • 使用者身份驗證 – 使用 JSON Web Token (JWT) 或 Open Authorization 2.0 (OAuth2) 實現安全身份驗證,通過註冊、登入和密碼重置功能增強使用者體驗。
  • 支付處理 – 使用安全的支付閘道器 API(如 Stripe 或 PayPal)進行交易和退款。
  • 訂單管理 – 使用 WooCommerce API 高效管理訂單和狀態。為訂單歷史、跟蹤、退貨和退款提供使用者友好的功能,並使用網路鉤子或事件驅動架構實現流程自動化。

在伺服器上部署您的無頭 WooCommerce 網站

一旦您開發了無頭 WooCommerce 網站,將其部署到伺服器上就變得簡單易行了。以 Kinsta 為例:

此外,您還可以免費將您的 React 應用程式部署到 Kinsta 的靜態網站託管服務上,您只需將程式碼推送到您喜歡的 Git 提供商(Bitbucket、GitHub 或 GitLab)即可。

推送程式碼後,請按照以下步驟部署網站:

  1. 登入 MyKinsta 面板。
  2. 單擊 Add service,然後單擊 Static Site
  3. 選擇 Git 提供商,然後單擊 Connect git provider
  4. 選擇要部署的版本庫和分支。系統會自動檢測構建設定。
  5. 確保從 .env 檔案中新增任何必要的環境變數。
    新增任何必要的環境變數
  6. 最後,點選 Create site 來部署 React 應用程式。

您已經成功部署了無頭 WooCommerce 應用程式!

小結

本文介紹了通過建立無頭 WooCommerce 網站來建立動態和高效能線上商店的眾多優勢和新的可能性。

通過將前端與後臺解耦,您可以自定義網站,為客戶提供更具吸引力和個性化的購物體驗,並從高效能、強大的安全性和可擴充套件性中獲益。

評論留言