WordPress Gutenberg 区块开发实战教程:构建版权日期区块

WordPress Gutenberg 区块开发实战教程:构建版权日期区块

前言

本教程将带领你从零开始开发一个实用的 WordPress Gutenberg 区块 - 版权日期区块。这个区块将显示版权符号(©)、当前年份以及可选的起始年份,是网站页脚常用的功能组件。

通过本教程,你将掌握 Gutenberg 区块开发的核心概念和完整流程,即使没有 WordPress 开发经验也能轻松上手。

开发环境准备

在开始之前,请确保你的开发环境满足以下要求:

  1. 代码编辑器(如 VS Code)
  2. Node.js 开发工具(建议使用 LTS 版本)
  3. 本地 WordPress 开发环境

如果你尚未配置好环境,建议先搭建好基础开发环境后再继续本教程。

创建区块基础结构

我们将使用 WordPress 官方提供的 create-block 工具来初始化区块项目。这个工具会自动生成区块开发所需的基础文件和目录结构。

在终端中执行以下命令:

npx @wordpress/create-block@latest copyright-date-block --variant=dynamic
cd copyright-date-block

这个命令会创建一个名为 copyright-date-block 的插件目录,其中包含区块开发所需的所有初始文件。--variant=dynamic 参数表示我们将创建一个动态渲染的区块。

区块文件结构解析

让我们先了解一下 create-block 工具生成的主要文件:

  • block.json:区块的元数据配置文件
  • src/index.js:区块的主入口文件,负责注册区块
  • src/edit.js:定义区块在编辑器中的行为和外观
  • src/render.php:处理区块在前端的动态渲染

配置区块元数据

首先我们需要修改 block.json 文件来定义区块的基本属性和功能支持:

  1. 更新区块描述为"显示网站的版权日期"
  2. 添加对文字颜色和字体大小的支持配置
  3. 移除不必要的样式表和前端脚本引用

最终的 block.json 配置如下:

{
  "$schema": "https://schemas.wp.org/trunk/block.json",
  "apiVersion": 3,
  "name": "create-block/copyright-date-block",
  "version": "0.1.0",
  "title": "Copyright Date Block",
  "category": "widgets",
  "description": "Display your site's copyright date.",
  "supports": {
    "color": {
      "background": false,
      "text": true
    },
    "html": false,
    "typography": {
      "fontSize": true
    }
  },
  "textdomain": "copyright-date-block",
  "editorScript": "file:./index.js",
  "render": "file:./render.php"
}

添加自定义图标

为了让区块在编辑器中有更好的辨识度,我们可以为其添加一个自定义图标。在 index.js 中添加日历图标的 SVG 定义:

const calendarIcon = (
  <svg
    viewBox="0 0 24 24"
    xmlns="http://www.w3.org/2000/svg"
    aria-hidden="true"
    focusable="false"
  >
    <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"></path>
  </svg>
);

实现基础功能

现在我们来实现区块的核心功能 - 显示版权符号和当前年份。

编辑器端实现

修改 edit.js 文件,添加获取当前年份并显示的代码:

export default function Edit() {
  const currentYear = new Date().getFullYear().toString();
  
  return (
    <p { ...useBlockProps() }>© { currentYear }</p>
  );
}

前端渲染实现

对应的,我们需要更新 render.php 文件以确保前端显示一致:

<p <?php echo get_block_wrapper_attributes(); ?>>© <?php echo date( "Y" ); ?></p>

添加起始年份功能

现在我们的区块已经能显示当前年份,接下来我们将添加显示起始年份的功能。

定义区块属性

block.json 中添加两个新属性:

"attributes": {
  "showStartingYear": {
    "type": "boolean",
    "default": false
  },
  "startingYear": {
    "type": "string",
    "default": ""
  }
}

更新编辑器界面

修改 edit.js 添加控件让用户可以:

  1. 切换是否显示起始年份
  2. 输入起始年份
import { ToggleControl, TextControl } from '@wordpress/components';

export default function Edit({ attributes, setAttributes }) {
  const { showStartingYear, startingYear } = attributes;
  const currentYear = new Date().getFullYear().toString();
  
  return (
    <div { ...useBlockProps() }>
      <p>© 
        { showStartingYear && startingYear && (startingYear + ' - ') }
        { currentYear }
      </p>
      <ToggleControl
        label="显示起始年份"
        checked={ showStartingYear }
        onChange={ (value) => setAttributes({ showStartingYear: value }) }
      />
      { showStartingYear && (
        <TextControl
          label="起始年份"
          value={ startingYear }
          onChange={ (value) => setAttributes({ startingYear: value }) }
        />
      )}
    </div>
  );
}

更新前端渲染

同步修改 render.php 以支持新功能:

<p <?php echo get_block_wrapper_attributes(); ?>>
  © 
  <?php if ( $attributes['showStartingYear'] && $attributes['startingYear'] ) : ?>
    <?php echo esc_html( $attributes['startingYear'] ) . ' - '; ?>
  <?php endif; ?>
  <?php echo date( "Y" ); ?>
</p>

优化与构建

完成所有功能后,我们可以进行一些优化:

  1. 移除未使用的样式文件和脚本
  2. 运行 npm run build 生成生产环境代码
  3. 测试区块在不同环境下的表现

总结

通过本教程,我们完成了一个功能完整的版权日期区块开发,涵盖了:

  1. 使用 create-block 初始化项目
  2. 配置区块元数据
  3. 实现基础功能
  4. 添加交互控件
  5. 处理前后端渲染

这个简单的区块开发过程展示了 Gutenberg 区块开发的核心流程和关键技术点。掌握了这些基础知识后,你可以进一步探索更复杂的区块开发技术。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

滕娴殉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值