问题:只想显示作者手动填写的摘要
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 一处维护。
适用场景与常见误区
适合:列表卡片想「有手动摘要就显示摘要、没填就显示默认内容」的场景,用动态条件优雅 fallback。误区:一是函数没在白名单注册,条件里选不到;二是判断逻辑只认「有值」,没区分空字符串和没填,该隐藏的还显示;三是忘了排除自动生成的 excerpt,和手动摘要打架。动态条件和动态标签配合用,能把「有没有填」这类判断做成可复用规则。
延伸阅读
- 想要现成外贸独立站,从零搭出能收询盘的站?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks)
常见问题(FAQ)
动态条件和动态标签什么关系? 标签负责「取什么值」,条件负责「这个值满不满足才显示」,常配合用。
前台不生效先查什么? 确认判断函数在白名单注册了,且返回的是布尔值而不是字符串。
空字符串和没填怎么区分? 逻辑里同时判断「字段存在」和「值非空」,避免空字符串被当成已填。
能和自动摘要共存吗? 能,但条件要排除自动生成的 excerpt,只对手动摘要做判断,避免两套打架。
- 相关阅读:Bricks Setup Guide
延伸阅读
Bricks 自定义动态数据标签入门:把自定义标签加进『选择动态数据』列表
教程:Bricks 自定义动态数据标签入门:把自定义标签加进『选择动态数据』列表——dynamic data 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks Query Loop 高亮当前文章:给循环项加 data-current 属性
教程:Bricks Query Loop 高亮当前文章:给循环项加 data-current 属性——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 查询结果数量标签 {query_results_count}:循环外也能判断有无结果
教程:Bricks 查询结果数量标签 {query_results_count}:循环外也能判断有无结果——dynamic data 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 判断 WooCommerce 购物车是否为空(条件渲染)
教程:Bricks 判断 WooCommerce 购物车是否为空(条件渲染)——woocommerce 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
