如何构建一个无头WooCommerce电商网站

WooCommerce 是用于构建电子商务应用程序的最流行的 WordPress 插件之一。除了在传统的 WordPress 应用程序中使用 WooCommerce 外,您还可以将其用作无头解决方案。
本文将教你如何使用部署的 React 构建无头 WooCommerce 应用程序。
无头 WooCommerce 简介
术语 “无头电子商务” 是指电子商务应用程序的后台(头)与前台(体)分离。无头架构通过 API 在电子商务解决方案的展示层(前端)和应用层(后端)之间传递请求。
应用程序接口(API)定义了中间层之间的交互,允许企业在不影响应用层功能的情况下更改表现层,并更新、编辑或添加产品到多个应用层。
在无头 WooCommerce 应用程序中,WooCommerce API 就是一个中介,提供前台和后台之间的通信。除了上述优点外,这还支持灵活、可扩展的前端开发,使您能够专注于使用 React 或 Vue 等现代技术栈制作引人入胜的动态用户界面。
此外,使用无头 WooCommerce 还能帮助您适应不断变化的客户需求和技术进步,从而使电子商务基础架构面向未来。您可以毫不费力地更新前端组件,同时确保后台 WooCommerce 平台的稳定性和可靠性。

传统的电子商务应用程序和无头 WooCommerce 应用程序。
与传统的 WordPress 电子商务设置相比,这种现代方法具有众多优势。
既然你已经了解了什么是无头 WooCommerce 应用程序及其优势,那么是时候为自己创建一个了。使用 WordPress、React 和 WooCommerce 插件,您将创建一个电子商务应用程序并将其部署到服务器上。
先决条件
在开始之前,请确保您具备以下条件:
- 了解 React 和 WordPress
- 安装了 Node.js
- 一个正在运行的 WordPress 网站
- 一个云服务器账号(以 Kinsta 为例)
无头 WooCommerce 的优势
当您为自己的 WooCommerce 应用程序选择无头路径时,您将获得一系列好处,尤其是让一个后台支持您应用程序的各种前端的灵活性。
以下是无头 WooCommerce 的其他一些优势:
- 增强了定制功能 – 您可以使用任何网络框架,随心所欲地构建您的 WooCommerce 应用程序。
- 提高网站性能 – 您可以利用 React 和 Vue 等快速网络框架来显著提高网站性能。
- 搜索引擎优化优势 – 您可以更灵活地控制搜索引擎优化策略,从而实现业务目标。
- 更好的可扩展性 – 您的网站可以更有效地扩展,即使在高流量期间也能确保性能流畅。
- 创造独特客户体验的能力 – 您可以摆脱传统模板的束缚。您可以为客户打造创新的个性化体验。
设置无头 WooCommerce 网站
以下是设置 WooCommerce 网站的分步指南:

安装 WordPress 和 WooCommerce 插件。
激活 WooCommerce 插件

激活 WooCommerce 插件。
注:如果您使用的是 Kinsta,安装过程中不会要求您提供文件传输协议(FTP)的详细信息。但是,如果您使用本地安装的 WordPress,则必须提供 FTP 详细信息。继续为无头操作配置 WooCommerce 插件。
为无头操作配置 WooCommerce
配置 WooCommerce 为无头操作:


在继续之前,请为您的 WooCommerce 商店添加一些产品。导航至 WordPress 面板中的 WooCommerce 部分,点击产品,然后根据提示添加产品。您也可以为您的商店导入这些示例产品。
安装好 WordPress 和 WooCommerce 后,你就可以专注于无头电子商务应用的前端了。
设置 React 项目
下面介绍如何创建 React 项目:
# 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>
REACT_APP_CONSUMER_KEY=your_Woocommerce_consumer_key REACT_APP_CONSUMER_SECRET=your_Woocommerce_consumer_secret
将其替换为之前生成的 WooCommerce 消费者密钥和私钥。
## With npm npm i react-router-dom ## With yarn yarn add react-router-dom
## 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。
REACT_APP_BASE_URL=http://example.com/wp-json/wc/v3/products
在进行 API 请求时,必须在 URL 中包含用户密钥和秘密。合并后的 URL 如下:
https://yourdomain.com/wp-json/wc/v3/products?consumer_key=your_consumer_key&consumer_secret=your_consumer_secret
让我们在 React 应用程序中使用 Fetch API 发起 API 请求,以获取 WooCommerce 产品。
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-dom 的 Link 组件中,该组件会根据 ID 生成一个指向单个产品详细信息页面的链接。
每个产品都会显示产品名称、价格、描述(使用 dangerouslySetInnerHTML 注入 HTML 内容)、库存状态和一个按钮。
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 组件。
## With npm npm start ## With yarn yarn start
React 应用程序现在可以显示 WooCommerce 商店的产品列表。

创建动态产品页面
现在,为了增强用户体验,请使用 WooCommerce API 创建动态产品页面。该 API 提供了一个用于获取单个产品数据的端点: wp-json/wc/v3/products/<id>。要使用该端点获取并显示商店中单个产品的数据,请按照以下步骤操作:
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;
ProductDetail 组件。此代码片段在 index.js 中创建一个新路由,并为其分配 ProductDetail 组件。这样,当用户点击产品链接时,就会被引导到相应的产品页面。
// 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)即可。
推送代码后,请按照以下步骤部署网站:

您已经成功部署了无头 WooCommerce 应用程序!
小结
本文介绍了通过建立无头 WooCommerce 网站来创建动态和高性能在线商店的众多优势和新的可能性。
通过将前端与后台解耦,您可以自定义网站,为客户提供更具吸引力和个性化的购物体验,并从高性能、强大的安全性和可扩展性中获益。