首页 / 中文教程 / 教程

把 Basic Text 元素默认 HTML 标签从 div 改成 p(复制元素法)

Bricks 的 Basic Text 元素默认输出 div,没有语义还烦人。通过把官方元素文件复制到子主题并修改默认值,再用 register_element 注册覆盖,让新元素默认输出 p。免费教程完整代码。

Ray Chan·2026-08-12·约 2 分钟

场景:Basic Text 默认输出 div

Bricks 里最恼人的默认值之一:Basic Text 元素默认输出 <div>,而大部分场景下文本内容应该用 <p> 标签(语义更好、SEO 更友好、继承段落样式更自然):

<div id="brxe-qgttsu" class="brxe-text-basic">Here goes your text ... Select any part of your text to access the formatting toolbar.</div>

当然,你可以在每次添加元素时从 HTML tag 下拉菜单里手动选 p,一劳永逸的方法是用 Advanced Themer 插件改默认值。如果不想为此多装一个插件,还有一个原生做法:把 Bricks 官方元素文件复制到子主题,修改默认值,再注册为自定义元素覆盖官方定义。本文就演示这条路线。

Step 1:安装 Bricks 子主题

先在后台安装并启用 Bricks Child Theme(如果还没装)。子主题可以随时启用,不会影响现有站点。

Step 2:复制元素文件到子主题

把官方元素文件复制到子主题目录:

/wp-content/themes/bricks/includes/elements/text-basic.php
→ /wp-content/themes/bricks-child/elements/text-basic.php

Bricks 的 Elements::register_element() 机制允许从任意路径注册元素文件,子主题里的同名元素会覆盖官方定义。

Step 3:修改元素文件

编辑 /wp-content/themes/bricks-child/elements/text-basic.php,做四处修改:

a) 注释或删除文件顶部的命名空间声明:

namespace Bricks;

b) 类名改为完全限定(因为不再处于 Bricks 命名空间内):

class Element_Text_Basic extends Element {

改成:

class Element_Text_Basic extends \Bricks\Element {

c) 在 set_controls() 里修改 tag 控件,把占位符 div 改为 p 并加上默认值:

$this->controls['tag'] = [
  'tab'         => 'content',
  'label'       => esc_html__( 'HTML tag', 'bricks' ),
  'type'        => 'select',
  'options'     => [
    'div'        => 'div',
    'p'          => 'p',
    'span'       => 'span',
    'figcaption' => 'figcaption',
    'address'    => 'address',
    'figure'     => 'figure',
    'custom'     => esc_html__( 'Custom', 'bricks' ),
  ],
  'lowercase'   => true,
  'inline'      => true,
  'placeholder' => 'div',
];

改成(关键差异:'placeholder' => 'p' 和新增 'default' => 'p'):

$this->controls['tag'] = [
  'tab'         => 'content',
  'label'       => esc_html__( 'HTML tag', 'bricks' ),
  'type'        => 'select',
  'options'     => [
    'div'        => 'div',
    'p'          => 'p',
    'span'       => 'span',
    'figcaption' => 'figcaption',
    'address'    => 'address',
    'figure'     => 'figure',
    'custom'     => esc_html__( 'Custom', 'bricks' ),
  ],
  'lowercase'   => true,
  'inline'      => true,
  'placeholder' => 'p',
  'default' => 'p',
];

d) 文件内其他对 Bricks 类的短引用补全命名空间,例如:

Helpers

改成:

\Bricks\Helpers

Step 4:在 functions.php 注册自定义元素

编辑子主题的 functions.php,把原本注册 title.php 的示例改成注册你的 text-basic.php

/**
 * Register custom elements
 */
add_action( 'init', function() {
  $element_files = [
    __DIR__ . '/elements/text-basic.php',
  ];

  foreach ( $element_files as $file ) {
    \Bricks\Elements::register_element( $file );
  }
}, 11 );

保存后回到编辑器,新拖入的 Basic Text 元素默认输出就是 <p>

<p id="brxe-ctzttq" class="brxe-text-basic">Here goes your text ... Select any part of your text to access the formatting toolbar.</p>

原理说明

  • register_element 的覆盖机制\Bricks\Elements::register_element( $file ) 会在 init 钩子上注册元素文件。Bricks 内部用元素类名去重——子主题注册的 Element_Text_Basic 与官方同名,后者生效,实现对官方元素的整体替换。钩子优先级用 11 是为了晚于 Bricks 自身的注册(默认 10),确保覆盖成功。
  • 为什么改默认值要看 default 而不是只改 placeholder:placeholder 只是输入框里的占位提示,元素实际输出用的是控件的默认值。原控件没设 default,所以 Bricks 回落到 div;补上 'default' => 'p' 才真正改变新元素的默认行为。
  • 命名空间问题:官方文件在 namespace Bricks; 下,类引用都是短名;复制出来去掉命名空间后,所有 ElementHelpers 引用必须改成 \Bricks\Element\Bricks\Helpers,否则 PHP 会在全局命名空间里找类,直接报错。

小结

「复制官方元素文件 → 改默认控件值 → register_element 覆盖注册」是 Bricks 深度定制元素的通用套路,不止能改默认标签:任何官方元素的默认设置、控件定义、渲染逻辑都能用这种方式覆写。不想折腾命名空间的话,用 Advanced Themer 一键改默认值也是省事的替代方案。

需要帮忙?

用 Bricks 建站?我接客户项目。

从快速营销站到完整的 Bricks 建站,再到从 Elementor 迁移——我都做过。本站每篇教程都来自真实项目经验。告诉我你的需求,一个工作日内回复。

  • Bricks 建站与改版
  • Elementor / Divi → Bricks 迁移
  • Bricks → Astro / headless 性能升级
  • 速度优化,PageSpeed 95+ 目标