惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

J
Java Code Geeks
S
SegmentFault 最新的问题
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
Stack Overflow Blog
Stack Overflow Blog
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
I
InfoQ
U
Unit 42
博客园_首页
GbyAI
GbyAI
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 聂微东
T
Tailwind CSS Blog
量子位

轻语博客

从 7711 元到单日 4.6 万:《牛来》的反向出圈,是烂片奇迹还是观众狂欢? QUX主题后台设置完整使用指南 QUX 主题内置短代码使用教程 WordPress 移除菜单代码中没必要的部分 什么是 LLMs.txt?它对SEO有用吗?WordPress 网站如何生成 LLMs.txt? QUX子主题模块化首页 Linux如何重启Redis?如何优化Redis性能? 宝塔面板自动重启数据库服务的shell脚本代码 2023奥维图源 免费谷歌地图 热门神器:ChatGPT在线,无需魔法开箱即用!最新接口高效稳定 WordPress 开发人员必备的 12 个工具 WP-China-Yes插件:将你的WordPress接入本土生态体系中
WordPress 6.2 引入 HTML API 修改HTML标签和属性
0 个人已赞 · 2023-03-23 · via 轻语博客

2023-03-23 分类:资讯分享 阅读(1.15K) 评论(0) 扫描二维码

WordPress 6.2 引入了WP_HTML_Tag_Processor –一个供块作者在PHP中调整块标记中的HTML 标签属性的工具。它是新 HTML 处理API中的第一个组件。

在 WordPress 中更新 HTML 一直需要使用不舒服的工具。正则表达式很困难并且容易出现各种错误。DOMDocument占用大量资源,无法正确处理现代 HTML,并且在许多托管平台上不可用。

WP_HTML_Tag_Processor(标签处理器)迈出了弥合这一差距的第一步。

标签处理器可以可靠地更新 HTML 属性

标签处理器找到特定的标签并可以更改其属性。下面是在 HTML 块中的第一个img标签上设置alt属性的示例。

$html = '<img src="/husky.jpg">';

$p = new WP_HTML_Tag_Processor( $html );

if ( $p->next_tag() ) {

$p->set_attribute( 'alt', 'Husky in the snow' );

}

echo $p->get_updated_html();

// Output:

// <img alt="Husky in the snow" src="/husky.jpg">

next_tag()方法移动到 HTML 中的下一个可用标签,但也接受标签名称、CSS类或两者以查找特定标签。根据 HTML 规范,标签和属性名称的查找不区分大小写,但 CSS 类名称区分。

if ( $p->next_tag( array( 'tag_name' => 'DIV', 'class_name' => 'block-GROUP' ) ) ) {

$p->remove_class( 'block-group' );

$p->add_class( 'wp-block-group' );

}

默认情况下操作是安全的:

  • 删除一个属性而不首先检查它是否存在,
  • 添加一个可能已经存在的 CSS 类,
  • 设置一个属性值而不确保它不会复制现有的值。

您不再需要担心您的代码会将<textarea>, 和属性值中的内容,甚至是 HTML 注释中的内容误认为是真正的标签。

标签处理器符合 HTML5 规范,因此您不必这样做。它会在必要时自动转义和解码值,并且知道如何处理格式错误的标签。

$ugly_html = <<<HTML

<textarea title='<div> elements are semantically void'>

<div><!--<div attr-->="</div>"></div>">

</textarea>

<div></div>

HTML;

$p = new WP_HTML_Tag_Processor( $ugly_html );

if ( $p->next_tag( 'div' ) ) {

$p->add_class( 'bold' );

}

echo $p->get_updated_html();

// Output:

// <textarea title='<div> elements are semantically void'>

// <div><!--<div attr-->="</div>"></div>">

// </textarea>

// <div class="bold"></div>

标签处理器的运行速度足以在关键的热代码路径中运行,并且几乎不会产生内存开销。在 WordPress 6.2 中,它取代了依赖正则表达式和字符串搜索来执行类似更新的容易出错的代码。

要更高级地使用标签处理器,请阅读大量的课堂文档并学习如何……

  • …设置书签以重新访问已扫描和修改的文档部分。
  • </div>除了开始标签之外,还可以访问结束标签。
  • …通过访问文档中的每个标签来运行高级和有状态的查询。

进一步的考虑

Tag Processor 不做很多事情:它不构建 DOM 文档树、查找嵌套标签或更新标签的内部 HTML 或内部文本。继续开发与 HTML 相关的新 API,未来的 WordPress 版本将建立在这项工作的基础上,以允许从 PHP 中访问块的所有属性(如果块提供block.json文件),使用 CSS 选择器查找标签,并修改HTML具有新标签、删除标签和更新的内部标记的结构。

您可以通过Gutenberg GitHub Repo上的这个概述问题跟上进一步的发展。

阅读全文