如何使用React创建WordPress主题

如何使用React创建WordPress主题

这篇实践文章利用 WordPress 的灵活性React 强大的用户界面(UI)进行主题开发。它通过引导您完成创建主题所需的步骤,展示了如何将 WordPress 和 React 整合在一起,从而提升您的 WordPress 项目。

前提条件

要学习本文,您应该具备以下条件:

  • 一个 WordPress 网站。
  • 在计算机上安装 Node.js 和 npm(Node 包管理器)或 yarn

创建基本的 WordPress 主题结构

创建基本的 WordPress 主题结构包括设置一系列文件和目录,WordPress 会使用这些文件和目录将主题的样式、功能和布局应用到 WordPress 网站。

  1. 在开发环境中,访问您的网站文件夹。导航到 wp-content/themes 目录。
  2. 为您的主题创建一个新文件夹。文件夹名称应该是唯一的,并具有描述性,例如,my-basic-theme
  3. 在主题文件夹中,创建这些重要文件并留空:
    • style.css – 这是主要的样式表文件。它还包含主题的标题信息。
    • functions.php – 该文件定义了主题要使用的函数、类、操作和过滤器。
    • index.php – 这是主模板文件。所有主题都需要使用该文件。

    如果不使用 React,还必须创建以下文件。但如果使用 React,我们将在稍后为它们创建组件。

    • header.php – 包含网站的页眉部分。
    • footer.php – 包含网站的页脚部分。
    • sidebar.php – 如果主题包含侧边栏,则包含侧边栏部分。

接下来,打开 style.css,在文件顶部添加以下内容:

/*
Theme Name: My Basic Theme
Theme URI: http://example.com/my-basic-theme/
Author: Your Name
Author URI: http://example.com
Description: A basic WordPress theme.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: blog, custom-background
Text Domain: my-basic-theme
*/

该代码片段是 WordPress 主题 style.css 文件的标题部分,包含主题名称、作者详细信息、版本和许可证等重要元数据。它可以帮助 WordPress 在仪表盘中识别和显示主题,包括主题描述和分类标签。

将 React 集成到 WordPress 中

将 React 集成到 WordPress 主题中,可以使用 React 基于组件的架构在 WordPress 网站中构建动态的交互式用户界面。要集成 React,您需要使用 @wordpress/scripts 包

这是一组专为 WordPress 开发定制的可重用脚本。WordPress 提供它是为了简化配置和构建过程,尤其是在 WordPress 主题和插件中集成 React 等现代 JavaScript 工作流时。

该工具包封装了常用任务,使在 WordPress 生态系统中使用 JavaScript 进行开发变得更加容易。

调整主题

有了基本的 WordPress 主题结构,您就可以调整主题了。

  1. 在主题目录中,将以下代码粘贴到 functions.php 文件中:
    <?php
    function my_react_theme_scripts() {
    wp_enqueue_script('my-react-theme-app', get_template_directory_uri() . '/build/index.js', array('wp-element'), '1.0.0', true);
    wp_enqueue_style('my-react-theme-style', get_stylesheet_uri());
    }
    add_action('wp_enqueue_scripts', 'my_react_theme_scripts');

    functions.php 文件将 React 与您的 WordPress 主题集成在一起。它使用 wp_enqueue_scriptwp_enqueue_style 函数为主题添加 JavaScript 和层叠样式表(CSS)文件。

    wp_enqueue_script  WordPress 函数需要几个参数:

    • 处理名(”my-react-theme-app“),用于唯一标识脚本
    • 脚本文件的路径
    • 依赖关系数组 array('wp-element'),表示脚本依赖于 WordPress 的 React 封装器('wp-element')。
      版本号( '1.0.0'
      位置 true,表示脚本应加载到 HTML 文档的页脚,以提高页面加载性能。
      wp_enqueue_style 函数接收以下参数:
      句柄名称 "my-react-theme-style" ,用于唯一标识样式表
      get_stylesheet_uri(),用于返回主题主样式表(style.css)的 URL,确保应用主题样式
      add_action 元素,用于将自定义函数 "my_react_theme_scripts" 与特定动作("wp_enqueue_scripts")挂钩。这样可以确保在 WordPress 准备呈现页面时正确加载 JavaScript 和 CSS。

    这段代码可确保 React 应用程序的 JavaScript 编译文件(位于 <your-theme-directory>/build/index.js 中)和主题的主样式表与主题一起加载。

    /build directory 通常是使用 create-react-appwebpack 等工具编译 React 应用程序时产生的,这些工具会将 React 代码捆绑成可用于生产的、经过精简的 JavaScript 文件。

    这种设置对于将 React 功能集成到 WordPress 主题中至关重要,可以在 WordPress 网站中实现动态的、类似应用程序的用户体验。

  2. 接下来,更新 index.php 文件的内容:
    <!DOCTYPE html>
    <html <?php language_attributes(); ?>>
    <head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <?php wp_head(); ?>
    </head>
    <body <?php body_class(); ?>>
    <div id="app"></div>
    <?php wp_footer(); ?>
    </body>
    </html>

    index.php 文件中的代码定义了 WordPress 主题的基本 HTML 结构,包括供 WordPress 插入必要页眉(wp_head)和页脚(wp_footer)的钩子,以及一个带有 ID appdiv,其中安装了 React 应用程序。

使用 @wordpress/scripts 设置 React

  1. 打开终端,进入主题目录:
    cd wp-content/themes/my-basic-theme
    
  2. 初始化一个新的 Node.js 项目:
    npm init -y
  3. 安装@wordpress/scripts 和 @wordpress/element
    npm install @wordpress/scripts @wordpress/element --save-dev

    请注意,这一步可能需要几分钟。

  4. 修改 package.json 文件,加入 start 和 build 脚本:
    "scripts": {
    "start": "wp-scripts start",
    "build": "wp-scripts build"
    },

    '@wordpress/scripts' 用于启动一个用于开发目的的热重载开发服务器(start),并将 React 应用程序编译成用于生产的静态资产(build)。

创建 React 项目

  1. 为主题中的 React 源文件创建一个名为 src 的新目录。
  2. 在 src 文件夹中创建两个新文件:index.jsApp.js
  3. 将以下代码放入 index.js
  4. import { render } from '@wordpress/element';
    import App from './App';
    render(, document.getElementById('app'))

    上面的代码从 @wordpress/elementApp 组件导入了 render 函数。然后,将 App 组件挂载到文档对象模型 (DOM)。

  5. 接下来,将此代码粘贴到 App.js 文件中:
    import { Component } from '@wordpress/element';
    export default class App extends Component {
    render() {
    return (
    <div> 
    <h1>Hello, WordPress and React!</h1>
    {/* Your React components will go here */}
    </div>
    );
    }
    }

确定并启用您的主题

启用主题:

  1. 使用 npm start 运行开发服务器。
  2. 在 WordPress 控制面板中激活新主题,方法是导航到 “外观“>”主题“,找到主题并单击 “启用“。
  3. 确保 React 项目的构建过程配置正确,以输出到正确的主题目录,从而允许 WordPress 渲染 React 组件。
  4. 访问 WordPress 网站的前端查看实时变化。

Hello, WordPress and React

主页上会显示新创建的基于 React 的 WordPress 主题,并带有 “Hello, WordPress and React” 的信息。

准备好部署主题后,运行:npm run build。这条命令会将 React 应用程序编译成静态资产,并将其放在主题文件夹内的构建目录中。

为主题开发 React 组件

接下来,采用基于组件的方法,在 WordPress 主题中使用特定组件(如页眉)扩展基本的 React 设置。

创建页眉组件

在主题的 src 目录中,为标题组件创建一个新文件。为文件命名,如 Header.js,并添加以下代码:

import { Component } from '@wordpress/element';
class Header extends Component {
render() {
const { toggleTheme, darkTheme } = this.props;
const headerStyle = {
backgroundColor: darkTheme ? '#333' : '#EEE',
color: darkTheme ? 'white' : '#333',
padding: '10px 20px',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
};
return (
<header style={headerStyle}>
<div>My WP Theme</div>
<button onClick={toggleTheme}>{darkTheme ? 'Light Mode' : 'Dark Mode'}</button>
</header>
);
}
}
export default Header;

这段代码使用 "@wordpress/element" 定义了一个标题组件,可根据  darkTheme prop 动态调整页眉样式。它包含一个按钮,可通过调用作为道具传递的 toggleTheme 方法在浅色和深色主题之间切换。

在主题的 src 目录中,为页脚组件创建一个新文件。给它取一个名字,例如 Footer.js,然后添加以下代码:

import { Component } from '@wordpress/element';
class Footer extends Component {
render() {
const { darkTheme } = this.props;
const footerStyle = {
backgroundColor: darkTheme ? '#333' : '#EEE',
color: darkTheme ? 'white' : '#333',
padding: '20px',
textAlign: 'center',
};
return (
<footer> style={footerStyle}>
© {new Date().getFullYear()} My WP Theme
</footer>
);
}
}
export default Footer;

此代码定义了一个页脚组件,该组件可根据 darkTheme prop 渲染具有动态样式的页脚,并显示当前年份。

更新 App.js 文件

要使用新的页眉和页脚,请用以下代码替换 App.js 文件的内容:

import { Component } from '@wordpress/element';
import Header from './Header';
import Footer from './Footer';
export default class App extends Component {
state = {
darkTheme: true,
};
toggleTheme = () => {
this.setState(prevState => ({
darkTheme: !prevState.darkTheme,
}));
};
render() {
const { darkTheme } = this.state;
return (
<div>
<Header darkTheme={darkTheme} toggleTheme={this.toggleTheme} />
<main style={{ padding: '20px', background: darkTheme ? '#282c34' : '#f5f5f5', color: darkTheme ? 'white' : 'black' }}>               
</main>
<Footer darkTheme={darkTheme} />
</div>
);
}
}

开发构建过程会监控更改并重新编译代码,该过程应仍处于激活状态。因此,你的最后一个版本的模板应该与此相似:

基于 React 的 WordPress 主题

显示基于 React 的 WordPress 主题(包括页眉和页脚)的主页。

如何在 React 中处理 WordPress 数据

在 React 应用程序中集成 WordPress 内容可在 WordPress 的强大内容管理功能和 React 的动态用户界面设计之间架起一座无缝的桥梁。WordPress REST API 可以实现这一点。

要访问 WordPress REST API,请通过更新固定链接设置来启用它。在 WordPress 管理仪表板上,导航到设置 > 固定链接。选择 “文章名” 选项或 “朴素” 以外的任何选项,然后保存更改。

在主题 src 目录下新建一个名为 Posts.js 的文件,并添加以下代码:

import { Component } from '@wordpress/element';
class Posts extends Component {
state = {
posts: [],
isLoading: true,
error: null,
};
componentDidMount() {
fetch('http://127.0.0.1/wordpress_oop/wp-json/wp/v2/posts')
.then(response => {
if (!response.ok) {
throw new Error('Something went wrong');
}
return response.json();
})
.then(posts => this.setState({ posts, isLoading: false }))
.catch(error => this.setState({ error, isLoading: false }));
}
render() {
const { posts, isLoading, error } = this.state;
if (error) {
return <div>Error: {error.message}</div>;
}
if (isLoading) {
return <div>Loading...</div>;
}
return (
<div>
{posts.map(post => (
<article key={post.id}>
<h2 dangerouslySetInnerHTML={{ __html: post.title.rendered }} />
<div dangerouslySetInnerHTML={{ __html: post.excerpt.rendered }} />
</article>
))}
</div>
);
}
}
export default Posts;

根据 WP 部署名称(即您安装 WP 的文件夹)的不同, fetch('http://127.0.0.1/wordpress_oop/wp-json/wp/v2/posts') URL 可能略有不同。或者,您也可以从 DevKinsta 面板获取网站主机名,然后添加后缀 /wp-json/wp/v2/posts

Posts 组件是这种集成的一个典型例子,它演示了使用 WordPress REST API 获取和管理 WordPress 数据(特别是文章)的过程。

通过在组件的生命周期方法( componentDidMount )中发起网络请求,该组件可以高效地从 WordPress 网站获取文章并将其存储在自己的状态中。这种方法强调了一种将 WordPress 数据(如页面或自定义文章类型)动态整合到 React 组件中的模式。

要使用新组件,请用以下代码替换 App.js 文件的内容:

import { Component } from '@wordpress/element';
import Header from './Header';
import Footer from './Footer';
import Posts from './Posts'; // Import the Posts component
export default class App extends Component {
state = {
darkTheme: true,
};
toggleTheme = () => {
this.setState(prevState => ({
darkTheme: !prevState.darkTheme,
}));
};
render() {
const { darkTheme } = this.state;
return (
<div>
<Header darkTheme={darkTheme} toggleTheme={this.toggleTheme} />
<main style={{ padding: '20px', background: darkTheme ? '#282c34' : '#f5f5f5', color: darkTheme ? 'white' : 'black' }}>
<Posts /> {/* Render the Posts component */}
</main>
<Footer darkTheme={darkTheme} />
</div>
);
}
}

您现在可以查看主题的最新最终版本。除了页眉和页脚,它还包括一个动态内容区域,用于展示文章。

基于 React 的 WordPress 最终主题

主页显示基于 React 的 WordPress 最终主题,包括文章。

在 WordPress 项目中使用 React WordPress 主题

要将基于 React 的主题集成到 WordPress 项目中,首先要利用 @wordpress/scripts 等软件包将 React 代码转换成与 WordPress 兼容的格式。该工具简化了构建过程,让你可以将 React 应用程序编译成 WordPress 可以启动的静态资产。

使用 @wordpress/scripts 提供的 npm 命令,构建主题非常简单。在主题目录下运行 npm run build ,即可将 React 代码编译成静态 JavaScript 和 CSS 文件。

然后,将这些编译好的资产放入主题中的相应目录,确保 WordPress 可以正确加载和呈现 React 组件作为主题的一部分。集成完成后,您就可以像激活其他主题一样激活 React WordPress 主题,立即为 WordPress 网站带来类似应用程序的现代用户体验。

小结

通过使用 React 强大的用户界面功能创建主题并将其集成到 WordPress 中,您可以释放创建灵活、高度交互和以用户为中心的网络体验的潜力。

评论留言