首页 / 中文教程 / 教程

Bricks 动态条件:仅当文章存在手动摘要(Excerpt)时才输出元素

Bricks 里用 {echo:函数} 动态条件判断文章是否手动填写了摘要,有才显示摘要区块。完整 PHP 函数 + 白名单 + 条件配置三步搞定。

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

问题:只想显示作者手动填写的摘要

Bricks Facebook 群里有人问:能否只在文章手动设置了摘要时才显示摘要?他的博客模板想在正文上方显示摘要,但前提是作者本人主动填写过,而不是 WordPress 自动从正文截取的那一段。

这个需求听起来简单,难点在于:WordPress 的 post_excerpt 字段区分不了“作者手写的摘要”和“系统自动生成的摘要”。Bricks 的 Excerpt 元素上直接挂条件,也没有现成的判断项。解决方案是自己写一个判断函数,再挂到动态数据条件(Dynamic data condition)上。

Step 1:定义 bl_has_manual_excerpt 函数

把下面的函数加到子主题的 functions.php(去掉开头的 <?php 标签)或代码片段插件里。它接收可选的 post ID,返回 true 表示存在手动摘要,否则返回 false

function bl_has_manual_excerpt( $post_id = null ) {
    $post = get_post( $post_id );
    if ( ! $post ) {
        return false;
    }

    // 检查文章是否有摘要
    if ( ! empty( $post->post_excerpt ) ) {
        // 获取自动生成的摘要(默认取正文前 55 个词)
        $auto_excerpt = wp_trim_words( $post->post_content, 55, '' );
        // 对比存储的摘要与自动生成的摘要
        return $post->post_excerpt !== $auto_excerpt;
    }

    return false;
}

原理:WordPress 在文章没有手动摘要时,会自动从正文前 55 个词生成一个摘要写入 post_excerpt。所以“有没有摘要”不能只看字段是否为空——需要把字段值和“系统自动生成的那份”做对比:如果两者不同,说明是作者手写的;如果完全相同,说明是自动生成的,不算手动摘要。这里用 wp_trim_words 以相同规则重新生成一份自动摘要用于比对。

Step 2:白名单注册函数

Bricks 出于安全考虑,默认只允许白名单内的函数通过 { echo:函数名 } 动态数据调用。需要把 bl_has_manual_excerpt 加进白名单:

add_filter( 'bricks/code/echo_function_names', function() {
    return [ 'bl_has_manual_excerpt' ];
} );

注意:你 Bricks 实例里用到的其他函数(原生的或自定义的)也要一起加进这个数组。可以在 Bricks → Settings → Custom code 里点 Code review 按钮,检查当前正在使用的函数列表,把缺的补上。

Step 3:给元素加动态条件

在单篇模板里选中你要条件输出的元素(比如摘要区块所在的 Container),在 Conditions 面板选择 Dynamic data 条件,填入:

{ echo:bl_has_manual_excerpt }

保存后去前台检查:手动填了摘要的文章会显示该区块,没填的文章区块被隐藏。条件为真(返回 true)时元素显示,为假时隐藏,符合直觉。

小结:这个方案的通用价值在于“用函数返回值做动态条件”这条路——{ echo:函数名 } 可以接任意返回布尔值的自定义函数,不只是摘要判断。任何“按数据状态条件渲染”的需求(比如判断文章有无特色图片、有无自定义字段值、字段是否等于某值)都可以套同一个套路:写函数 → 白名单 → 挂条件。比在编辑器里堆一堆 AND/OR 条件清爽得多,逻辑也都在 PHP 一处维护。

需要帮忙?

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

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

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