搜索
首页web前端css教程开始使用WordPress块开发

Getting Started With WordPress Block Development

WordPress开发目前正经历转型期,无论您是WordPress新手还是资深开发者,“全站编辑”(FSE)功能的引入,包括区块编辑器(WordPress 5.0)和站点编辑器(WordPress 5.9),都颠覆了我们构建WordPress主题和插件的传统方式。

尽管我们第一次接触区块编辑器已经五年了,但它的开发仍然充满挑战,因为文档要么缺失,要么过时。这更多地反映了FSE功能快速迭代的现状。

例如,2018年,CSS-tricks上曾发表过一个关于Gutenberg开发入门的系列文章。但时过境迁,虽然那种开发方式仍然有效,但已不再推荐(此外,它所基于的create-guten-block项目也不再维护)。

本文旨在帮助您开始WordPress区块开发,并遵循当前的方法。当然,本文发布后,情况可能会发生变化。但我将尝试关注其核心思想,因为即使工具会随着时间推移而发展,核心概念很可能保持不变。

WordPress区块究竟是什么?

首先,让我们澄清一些术语,例如“区块”。在WordPress 5.0之前的这些功能的所有开发都使用代号“Gutenberg”(印刷术的发明者)。

从那时起,“Gutenberg”已被用来描述与区块相关的一切,包括区块编辑器和站点编辑器,因此它变得复杂到一些人讨厌这个名字的程度。最重要的是,还有一个Gutenberg插件用于测试实验性功能,以供将来可能包含。如果您认为将所有这些称为“全站编辑”可以解决问题,那么也存在一些担忧。

因此,在本文中,当我们提到“区块”时,指的是在WordPress区块编辑器中创建内容的组件。区块被插入页面或文章中,并为特定类型的内容提供结构。WordPress自带了一些用于常见内容类型的“核心”区块,例如段落、列表、图像、视频和音频等等。

除了这些核心区块外,我们还可以创建自定义区块。这就是WordPress区块开发的重点(还可以过滤核心区块以修改其功能,但您可能暂时不需要)。

区块的作用

在我们深入创建区块之前,我们必须首先了解区块的内部工作原理。这绝对可以节省我们以后很多麻烦。

我喜欢将区块抽象地理解为:一个具有某些属性(称为属性)的实体,代表某些内容。我知道这听起来很模糊,但请耐心听我解释。区块基本上以两种方式表现出来:作为区块编辑器中的图形界面,或作为数据库中的数据块。

当您打开WordPress区块编辑器并插入一个区块(例如,Pullquote区块)时,您会得到一个不错的界面。您可以点击该界面并编辑引用的文本。区块编辑器UI右侧的“设置”面板提供用于调整文本和设置区块外观的选项。

当您完成创建精美的引用并点击“发布”时,整篇文章都会存储在数据库的wp_posts表中。由于Gutenberg,这没有什么新意。这就是事情一直以来的工作方式——WordPress将文章内容存储在数据库中的指定表中。但新的是Pullquote区块的表示是存储在wp_posts表的post_content字段中的内容的一部分。

这种表示是什么样的?让我们来看看:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

看起来像普通的HTML,对吧?!用技术术语来说,这就是“序列化”的区块。请注意HTML注释中的JSON数据,“textAlign”:“right”。这是一个属性——与区块相关的属性。

假设您关闭了区块编辑器,然后一段时间后再次打开它。区块编辑器将检索相关post_content字段中的内容。然后,编辑器解析检索到的内容,并在遇到以下内容时:

<code>...</code>

它会自言自语:

好吧,这看起来像一个Pullquote区块。嗯……它也有一个属性……我确实有一个JavaScript文件,它告诉我如何根据其属性在编辑器中构造Pullquote区块的图形界面。我现在应该这样做,以便以其全部荣耀呈现此区块。

作为区块开发者,您的工作是:

  1. 告诉WordPress您要注册特定类型的区块,以及相关细节。
  2. 向区块编辑器提供JavaScript文件,这将帮助它在编辑器中呈现区块,同时将其“序列化”以将其保存到数据库中。
  3. 提供区块正常运行所需的任何其他资源,例如样式和字体。

需要注意的是,所有这些从序列化数据到图形界面的转换——反之亦然——只发生在区块编辑器中。在前端,内容的显示方式与存储方式完全相同。因此,从某种意义上说,区块是一种将数据放入数据库的巧妙方法。

希望这能使您更清楚地了解区块的工作原理。

区块只是插件

区块只是插件。好吧,从技术上讲,您可以区块放在主题中,也可以多个区块放在一个插件中。但是,通常情况下,如果您想制作一个区块,您将要制作一个插件。因此,如果您曾经创建过WordPress插件,那么您已经部分掌握了制作WordPress区块的方法。

但是,让我们假设您从未设置过WordPress插件,更不用说区块了。你甚至从哪里开始?

设置区块

我们已经介绍了什么是区块。让我们开始设置来制作一个。

确保已安装Node

这将使您可以访问npm和npx命令,其中npm安装区块的依赖项并帮助编译内容,而npx在不安装软件包的情况下运行软件包上的命令。如果您使用的是macOS,您可能已经安装了Node,并且可以使用nvm更新版本。如果您使用的是Windows,则需要下载并安装Node。

创建项目文件夹

现在,您可能会遇到其他教程,它们直接跳转到命令行并指示您安装名为@wordpress/create-block的软件包。此软件包非常棒,因为它会生成一个完整的项目文件夹,其中包含开始开发所需的所有依赖项和工具。

我个人在设置自己的区块时会采用这种方法,但请暂时容忍我一下,因为我想消除它引入的主观内容,并仅关注基本开发环境的必需部分,以便理解。

这些是我想特别指出的文件:

  • readme.txt:这有点像插件目录的正面,通常用于描述插件并提供有关用法和安装的更多详细信息。如果您将区块提交到WordPress插件目录,则此文件有助于填充插件页面。如果您计划为区块插件创建GitHub存储库,那么您也可以考虑使用包含相同信息的README.md文件,以便它在那里很好地显示。
  • package.json:这定义了开发所需的Node软件包。我们将在安装时打开它。在经典的WordPress插件开发中,您可能习惯于使用Composer和composer.json文件。这是它的等效项。
  • plugin.php:这是主要的插件文件,是的,它是经典的PHP!我们将在这里放置插件标题和元数据,并使用它来注册插件。

除了这些文件外,还有一个src目录,它应该包含区块的源代码。

拥有这些文件和src目录就足以开始了。在那组中,请注意我们实际上只需要一个文件(plugin.php)来制作插件。其余的要么提供信息,要么用于管理开发环境。

前面提到的@wordpress/create-block软件包为我们搭建了这些文件(以及更多)。您可以将其视为自动化工具,而不是必需品。无论如何,它确实使工作更容易,因此您可以通过运行以下命令来自由地使用它来搭建区块:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

安装区块依赖项

假设您已准备好上一节中提到的三个文件,现在该安装依赖项了。首先,我们需要指定我们将需要的依赖项。我们通过编辑package.json来做到这一点。使用@wordpress/create-block实用程序时,会为我们生成以下内容(添加了注释;JSON不支持注释,因此如果您复制代码,请删除注释):

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

查看无注释版本 ```json { "name": "block-example", "version": "0.1.0", "description": "Example block scaffolded with Create Block tool.", "author": "The WordPress Contributors", "license": "GPL-2.0-or-later", "main": "build/index.js", "scripts": { "build": "wp-scripts build", "format": "wp-scripts format", "lint:css": "wp-scripts lint-style", "lint:js": "wp-scripts lint-js", "packages-update": "wp-scripts packages-update", "plugin-zip": "wp-scripts plugin-zip", "start": "wp-scripts start" }, "devDependencies": { "@wordpress/scripts": "^24.1.0" } }

<code>...</code>

现在package.json已设置完毕,我们应该能够通过在命令行中导航到项目文件夹并运行npm install来安装所有这些依赖项。

添加插件标题

如果您来自经典的WordPress插件开发,那么您可能知道所有插件在主插件文件中都有一块信息,这有助于WordPress识别插件并在WordPress管理面板的“插件”屏幕上显示有关它的信息。

以下是@wordpress/create-block为我生成的,用于一个创造性地称为“Hello World”的插件:

npx @wordpress/create-block

这在主插件文件中,您可以根据需要随意命名。您可以将其命名为index.php或plugin.php之类的通用名称。create-block包会自动将其命名为您在安装时提供的项目名称。由于我将此示例称为“Block Example”,因此该包为我们提供了一个block-example.php文件,其中包含所有这些内容。

您需要更改一些详细信息,例如将自己设为作者等等。并非所有这些都是必要的。如果我从“头”开始,那么它可能更接近于此:

{
  // 定义项目名称
  "name": "block-example",
  // 使用语义版本控制设置项目版本号
  "version": "0.1.0",
  // 项目的简短描述
  "description": "Example block scaffolded with Create Block tool.",
  // 您可以将其替换为您自己
  "author": "The WordPress Contributors",
  // 标准许可信息
  "license": "GPL-2.0-or-later",
  // 定义主JavaScript文件
  "main": "build/index.js",
  // 我们在开发过程中构建和编译插件所需的一切
  "scripts": {
    "build": "wp-scripts build",
    "format": "wp-scripts format",
    "lint:css": "wp-scripts lint-style",
    "lint:js": "wp-scripts lint-js",
    "packages-update": "wp-scripts packages-update",
    "plugin-zip": "wp-scripts plugin-zip",
    "start": "wp-scripts start"
  },
  // 定义使用脚本包的哪个版本(撰写本文时为24.1.0)
  // https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/
  "devDependencies": {
    "@wordpress/scripts": "^24.1.0"
  }
}

我不会详细介绍每一行的确切用途,因为这在WordPress插件手册中已经是一个完善的模式了。

文件结构

我们已经查看了区块所需的文件。但是,如果您使用的是@wordpress/create-block,您将在项目文件夹中看到许多其他文件。

以下是目前包含的内容:

<code>
这里的@wordpress/scripts包是主要的依赖项。如您所见,它是一个devDependency,这意味着它有助于开发。如何?它公开了wp-scripts二进制文件,我们可以使用它来编译我们的代码,从src目录到build目录,等等。

WordPress维护了许多其他软件包,用于各种目的。例如,@wordpress/components软件包为WordPress区块编辑器提供了一些预制UI组件,可用于为区块创建一致的用户体验,并符合WordPress设计标准。

您实际上*不需要*安装这些软件包,即使您想使用它们也是如此。这是因为这些@wordpress依赖项不会与您的区块代码捆绑在一起。相反,任何引用实用程序软件包代码的导入语句——例如@wordpress/components——都用于在编译期间构造“资产”文件。此外,这些导入语句被转换为将导入映射到全局对象的属性的语句。例如,import { \_\_ } from "@wordpress/i18n"被转换为const \_\_ = window.wp.i18n.\_\_的缩小版本。(window.wp.i18n是一个保证在全局范围内可用的对象,一旦相应的i18n软件包文件被排队)。

在插件文件中注册区块期间,隐式使用“资产”文件来告诉WordPress区块的软件包依赖项。这些依赖项会自动排队。所有这些都在幕后完成,前提是您使用的是scripts软件包。也就是说,您仍然可以选择在package.json文件中本地安装依赖项以进行代码完成和参数信息:

```json
// etc.
"devDependencies": {
  "@wordpress/scripts": "^24.1.0"
},
"dependencies": {
  "@wordpress/components": "^19.17.0"
}</code>

哇,好多!让我们指出新的内容:

  • build/:此文件夹在处理生产用途的文件时接收已编译的资产。
  • node_modules:此文件夹保存我们运行npm install时安装的所有开发依赖项。
  • src/:此文件夹保存插件的源代码,这些源代码将被编译并发送到build目录。我们稍后将查看其中的每个文件。
  • .editorconfig:这包含用于调整代码编辑器以实现代码一致性的配置。
  • .gitignore:这是一个标准的存储库文件,用于识别应从版本控制跟踪中排除的本地文件。您的node_modules绝对应该包含在此处。
  • package-lock.json:这是一个自动生成的文件,用于跟踪使用npm install安装的所需软件包的更新。

区块元数据

我想与您一起深入研究src目录,但首先将重点放在其中的一个文件上:block.json。如果您使用的是create-block,它已经为您准备好了;如果没有,请继续创建它。WordPress正在大力推动将其作为标准的规范方法来注册区块,方法是提供元数据,这些元数据为WordPress提供上下文,以便同时识别区块并在区块编辑器中呈现它。

以下是@wordpress/create-block为我生成的内容:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

实际上,我们可以在此处包含许多不同的信息,但实际上只需要name和title。一个超级精简的版本可能如下所示:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>
  • $schema定义用于验证文件内容的模式格式。听起来像是一个必需的东西,但它完全是可选的,因为它允许支持的代码编辑器验证语法并提供其他额外功能,例如工具提示提示和自动完成。
  • apiVersion指的是插件使用的Block API的哪个版本。今天,版本2是最新版本。
  • name是一个必需的唯一字符串,有助于识别插件。请注意,我已经在前面添加了css-tricks/,我将其用作命名空间,以帮助避免与可能具有相同名称的其他插件发生冲突。您可以选择使用您的姓名首字母缩写之类的东西(例如as/block-example)。
  • version是WordPress建议用作发布新版本时的缓存清除机制。
  • title是另一个必需的字段,它设置在显示插件的任何位置使用的名称。
  • category将区块与其他区块分组,并将其一起显示在区块编辑器中。当前存在的类别包括文本、媒体、设计、小部件、主题和嵌入,您甚至可以创建自定义类别。
  • icon允许您从Dashicons库中选择一些内容,以便在区块编辑器中以可视方式表示您的区块。我使用format-quote图标,因为我们在这个示例中正在制作我们自己的pullquote之类的东西。我们可以利用现有的图标而不是必须创建我们自己的图标,这很好,尽管这当然也是可能的。
  • editorScript是主JavaScript文件index.js所在的位置。

注册区块

在我们进入实际代码之前,还有一件事,那就是注册插件。我们刚刚设置了所有这些元数据,我们需要一种方法让WordPress使用它。这样,WordPress就知道在哪里可以找到所有插件资产,以便可以将它们排队用于区块编辑器。

注册区块是一个两步过程。我们需要在PHP和JavaScript中注册它。对于PHP方面,打开主插件文件(在本例中为block-example.php),并在插件标题之后添加以下内容:

<code>...</code>

这就是create-block实用程序为我生成的内容,这就是为什么函数的命名方式如此的原因。我们可以使用不同的名称。关键是避免与其他插件冲突,因此最好在此处使用您的命名空间以使其尽可能唯一:

npx @wordpress/create-block

如果包含所有区块元数据的block.json位于src中,为什么我们要指向build目录?这是因为我们的代码仍然需要编译。scripts软件包处理src目录中文件的代码并将生产中使用的已编译文件放置在build目录中,同时复制block.json文件

好了,让我们转到注册区块的JavaScript方面。打开src/index.js并确保它如下所示:

{
  // 定义项目名称
  "name": "block-example",
  // 使用语义版本控制设置项目版本号
  "version": "0.1.0",
  // 项目的简短描述
  "description": "Example block scaffolded with Create Block tool.",
  // 您可以将其替换为您自己
  "author": "The WordPress Contributors",
  // 标准许可信息
  "license": "GPL-2.0-or-later",
  // 定义主JavaScript文件
  "main": "build/index.js",
  // 我们在开发过程中构建和编译插件所需的一切
  "scripts": {
    "build": "wp-scripts build",
    "format": "wp-scripts format",
    "lint:css": "wp-scripts lint-style",
    "lint:js": "wp-scripts lint-js",
    "packages-update": "wp-scripts packages-update",
    "plugin-zip": "wp-scripts plugin-zip",
    "start": "wp-scripts start"
  },
  // 定义使用脚本包的哪个版本(撰写本文时为24.1.0)
  // https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/
  "devDependencies": {
    "@wordpress/scripts": "^24.1.0"
  }
}

我们正在进入React和JSX领域!这告诉WordPress:

  • 从@wordpress/blocks软件包导入registerBlockType模块。
  • 从block.json导入元数据。
  • 从其相应的文件导入Edit和Save组件。我们稍后将向这些文件中添加代码。
  • 注册区块,并使用Edit和Save组件来呈现区块并将内容保存到数据库中。

Edit和save函数是怎么回事?WordPress区块开发的细微之处之一是区分“后端”和“前端”,这些函数用于在这些上下文中呈现区块的内容,其中edit处理后端呈现,save将内容从区块编辑器写入数据库以在网站的前端呈现内容。

快速测试

我们可以快速操作一下,看看我们的区块是否在区块编辑器中工作并在前端呈现。让我们再次打开index.js,并使用edit和save函数返回一些基本内容,以说明它们的工作方式:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

这基本上是我们之前代码的精简版本,只是我们直接指向block.json中的元数据来获取区块名称,并且省略了Edit和Save组件,因为我们直接从此处运行函数。

我们可以通过在命令行中运行npm run build来编译它。之后,我们可以在区块编辑器中访问名为“Block Example”的区块:

如果我们将区块放入内容区域,我们将获得从edit函数返回的消息:

如果我们保存并发布文章,则在前端查看时,我们应该获得从save函数返回的消息:

创建区块

看起来一切正常!现在我们已经确认一切正常,我们可以恢复到测试之前的index.js中的内容:

<code>...</code>

请注意,edit和save函数与src目录中@wordpress/create-block为我们生成的两个现有文件相关联,并且包含我们在每个文件中需要的其他导入。更重要的是,这些文件建立了包含区块标记的Edit和Save组件。

后端标记(src/edit.js)

npx @wordpress/create-block

看看我们做了什么?我们正在从@wordpress/block-editor软件包导入props,这允许我们生成稍后可以用于样式的类。我们还导入了__国际化函数,用于处理翻译。

前端标记(src/save.js)

这将创建一个Save组件,我们将使用与src/edit.js几乎相同的内容,但文本略有不同:

{
  // 定义项目名称
  "name": "block-example",
  // 使用语义版本控制设置项目版本号
  "version": "0.1.0",
  // 项目的简短描述
  "description": "Example block scaffolded with Create Block tool.",
  // 您可以将其替换为您自己
  "author": "The WordPress Contributors",
  // 标准许可信息
  "license": "GPL-2.0-or-later",
  // 定义主JavaScript文件
  "main": "build/index.js",
  // 我们在开发过程中构建和编译插件所需的一切
  "scripts": {
    "build": "wp-scripts build",
    "format": "wp-scripts format",
    "lint:css": "wp-scripts lint-style",
    "lint:js": "wp-scripts lint-js",
    "packages-update": "wp-scripts packages-update",
    "plugin-zip": "wp-scripts plugin-zip",
    "start": "wp-scripts start"
  },
  // 定义使用脚本包的哪个版本(撰写本文时为24.1.0)
  // https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/
  "devDependencies": {
    "@wordpress/scripts": "^24.1.0"
  }
}

同样,我们得到了一个可以在CSS中使用的不错的类:

样式区块

我们刚刚介绍了如何使用区块属性来创建类。您正在CSS相关的网站上阅读这篇文章,因此我觉得如果我们没有特别介绍如何编写区块样式,我会错过一些东西。

区分前端和后端样式

如果您查看src目录中的block.json,您会发现两个与样式相关的字段:

  • editorStyle提供应用于后端的样式的路径。
  • style是应用于前端和后端的共享样式的路径。

Kev Quirk有一篇详细的文章展示了他使后端编辑器看起来像前端UI的方法。

回想一下,@wordpress/scripts软件包在处理/src目录中的代码并将已编译的资产放置在/build目录中时,会复制block.json文件。用于注册区块的是build/block.json文件。这意味着我们在src/block.json中提供的任何路径都应相对于build/block.json编写。

使用Sass

我们可以将几个CSS文件放入build目录中,在src/block.json中引用路径,运行build,然后就完成了。但这并没有充分利用@wordpress/scripts编译过程的功能,该过程能够将Sass编译成CSS。相反,我们将样式文件放在src目录中,并在JavaScript中导入它们。

这样做时,我们需要注意@wordpress/scripts如何处理样式:

  • 导入到JavaScript代码中的名为style.css或style.scss或style.sass的文件将编译为style-index.css。
  • 所有其他样式文件都将被编译并捆绑到index.css中。

@wordpress/scripts软件包使用webpack进行捆绑,并使用PostCSS插件进行样式处理。PostCSS可以使用其他插件进行扩展。scripts软件包使用Sass、SCSS和Autoprefixer的插件,所有这些插件都无需安装其他软件包即可使用。

事实上,当您使用@wordpress/create-block启动初始区块时,您可以很好地开始使用SCSS文件,您可以使用这些文件快速上手:

  • editor.scss包含应用于后端编辑器的所有样式。
  • style.scss包含前端和后端共享的所有样式。

现在让我们通过编写一些我们将编译成区块CSS的Sass来实际操作一下。尽管这些示例不会非常Sass化,但我仍然将它们写入SCSS文件以演示编译过程。

前端和后端样式

好的,让我们从应用于前端和后端的样式开始。首先,我们需要创建src/style.scss(如果您使用的是@wordpress/create-block,它已经存在),并确保我们导入它,我们可以在index.js中执行此操作:

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

打开src/style.scss并在其中使用从区块属性为我们生成的类放入一些基本样式:

<code>...</code>

现在就这些!当我们运行build时,这将编译成build/style.css,并由区块编辑器和前端引用。

后端样式

您可能需要编写特定于区块编辑器的样式。为此,请创建src/editor.scss(同样,@wordpress/create-block为您执行此操作),并在其中放入一些样式:

npx @wordpress/create-block

然后在edit.js中导入它,该文件包含我们的Edit组件(我们可以在任何地方导入它,但由于这些样式是用于编辑器的,因此在此处导入组件更合乎逻辑):

<blockquote>
    <p>It is not an exaggeration to say that peas can be described as nothing less than perfect spheres of joy.</p>
    <cite>The Encyclopedia of world peas</cite>
  </blockquote>

现在,当我们运行npm run build时,样式将应用于这两种上下文中的区块:

在block.json中引用样式

我们在edit.js和index.js中导入了样式文件,但请记住,编译步骤为我们在build目录中生成了两个CSS文件:index.css和style-index.css。我们需要在区块元数据中引用这些生成的文件。

让我们向block.json元数据添加几个语句:

<code>...</code>

再次运行npm run build,在您的WordPress网站上安装并激活插件,您就可以使用了!

您可以使用npm run start以监视模式运行您的构建,每次您更改代码并保存时都会自动编译您的代码。

我们只是触及了表面

实际的区块使用了区块编辑器的“设置”侧边栏和WordPress提供的其他功能来创建丰富的用户体验。此外,由于区块实际上有两个版本——edit和save——您还需要考虑如何组织代码以避免代码重复。

但希望这有助于消除创建WordPress区块的总体过程的神秘感。这确实是WordPress开发的新时代。学习新的做事方法很困难,但我期待着看到它的发展。像@wordpress/create-block这样的工具有所帮助,但即使那样,了解它到底在做什么以及为什么这样做也很不错。

我们在这里介绍的内容会改变吗?很可能!但至少您有一个基线可以作为参考,因为我们继续关注WordPress区块的成熟,包括制作它们的最佳实践。

参考

再次声明,我的目标是规划出一条高效的路径,以便在这个快速发展的时代进入区块开发,WordPress文档有点难以跟上。以下是我用来整理这些内容的一些资源:

  • 关键概念(WordPress区块编辑器手册)
  • 创建区块教程(WordPress区块编辑器手册)
  • block.json中的元数据(WordPress区块编辑器手册)
  • 核心区块的源代码(WordPress GitHub)
  • @wordpress/scripts软件包中使用的webpack配置(WordPress GitHub)
  • 后端工程师学习构建区块编辑器区块,第1部分(Tom McFarlin)
  • Ryan Welcher的Twitch直播(Ryan是Automattic的开发者倡导者)

以上是开始使用WordPress块开发的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
模拟鼠标运动模拟鼠标运动Apr 22, 2025 am 11:45 AM

如果您曾经在现场演讲或课程中必须显示一个互动动画,那么您可能知道它并不总是那么容易与您的幻灯片进行互动

通过Astro Action和Fuse.js为搜索提供动力通过Astro Action和Fuse.js为搜索提供动力Apr 22, 2025 am 11:41 AM

对于Astro,我们可以在构建过程中生成大部分网站,但是有一小部分服务器端代码可以使用Fuse.js之类的搜索功能来处理搜索功能。在此演示中,我们将使用保险丝搜索一组个人“书签”

未定义:第三个布尔值未定义:第三个布尔值Apr 22, 2025 am 11:38 AM

我想在我的一个项目中实现一条通知消息,类似于您在保存文档时在Google文档中看到的信息。换句话说,一个

捍卫三元声明捍卫三元声明Apr 22, 2025 am 11:25 AM

几个月前,我正在使用黑客新闻(就像一个人一样),并且遇到了一篇(现已删除的)文章,内容涉及不使用if语句。如果您是这个想法的新手(就像我

使用网络语音API进行多语言翻译使用网络语音API进行多语言翻译Apr 22, 2025 am 11:23 AM

自科幻小说以来,我们就幻想着与我们交谈的机器。今天这很普遍。即便如此,制造的技术

JetPack Gutenberg块JetPack Gutenberg块Apr 22, 2025 am 11:20 AM

我记得当古腾堡被释放到核心时,因为那天我在WordCamp我们。现在已经过去了几个月,所以我想我们越来越多的人

在VUE中创建可重复使用的分页组件在VUE中创建可重复使用的分页组件Apr 22, 2025 am 11:17 AM

大多数Web应用程序背后的想法是从数据库中获取数据,并以最佳方式将其呈现给用户。当我们处理数据时

使用'盒子阴影”和剪辑路径一起使用'盒子阴影”和剪辑路径一起Apr 22, 2025 am 11:13 AM

让我们对您可以做一些有意义的事情做一些逐步的情况,但是您仍然可以用CSS欺骗来完成它。在这个

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。