场景: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;下,类引用都是短名;复制出来去掉命名空间后,所有Element、Helpers引用必须改成\Bricks\Element、\Bricks\Helpers,否则 PHP 会在全局命名空间里找类,直接报错。
小结
「复制官方元素文件 → 改默认控件值 → register_element 覆盖注册」是 Bricks 深度定制元素的通用套路,不止能改默认标签:任何官方元素的默认设置、控件定义、渲染逻辑都能用这种方式覆写。不想折腾命名空间的话,用 Advanced Themer 一键改默认值也是省事的替代方案。