🆕 Bricks 2.4 已发布:查询循环性能提升 40%,迁移教程同步更新 →

首页 / 中文教程 / 教程

Bricks 自定义字段文本限字数动态标签:{custom_field_word_limit_字段名:数字}

教程:Bricks 自定义字段文本限字数动态标签:{custom_field_word_limit_字段名:数字}——dynamic data 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-12·约 2 分钟
目录
  1. 1.痛点:post_excerpt 能限字数,自定义字段不行
  2. 2.目标:custom_field_word_limit_ 标签
  3. 3.Step 1:注册动态数据标签(补全实现)
  4. 4.Step 2:模板中使用
  5. 5.中文小结

⚠️ 原文为 BricksLabs Pro 付费教程,核心代码锁定。本文按可见说明写场景 + 骨架,代码用 Bricks 官方钩子补全并标注「补全实现」。

痛点:post_excerpt 能限字数,自定义字段不行

Bricks Discord 群里有人问:post_excerpt:55 可以把摘要限制为 55 个词,超长时自动补 ...。但同样的写法用在自定义字段上——比如 {my_custom_description:55}——只截断了词数,不会自动加省略号。

Bricks 原生对自定义字段文本的截断只做 wp_trim_words 式处理,不带省略号后缀;而且 ACF / Meta Box / JetEngine 等插件的字段标签各有各的渲染逻辑,统一行为很难靠配置实现。最干净的解法是注册一个自己的动态数据标签。

目标:custom_field_word_limit_ 标签

注册后的标签形如:

{custom_field_word_limit_page_description:22}

含义:读取字段 page_description 的值,截断为前 22 个词;如果原文超过 22 词,末尾追加 ...。不写数字时输出完整字段值。标签前缀固定为 custom_field_word_limit_,后面跟字段名,冒号后跟字数。

它通过 WordPress 标准函数 get_post_meta() 取值,所以与具体字段插件无关——ACF、Meta Box、JetEngine 存的字段最终都在 wp_postmeta 表里,都能读到。

Step 1:注册动态数据标签(补全实现)

用 Bricks 官方钩子 bricks/dynamic_data/tags(注册标签)和 bricks/dynamic_data/render_tag(渲染值),放入子主题 functions.php(去掉开头 <?php):

// 补全实现:注册 {custom_field_word_limit_字段名:数字} 标签,非原文代码
// 1) 注册标签:动态生成,支持任意字段名
add_filter( 'bricks/dynamic_data/tags', function( $tags ) {
    // 核心标签:custom_field_word_limit_ 前缀 + 字段名
    $tags['custom_field_word_limit_'] = [
        'label' => 'Custom Field Word Limit',
        'render' => 'bl_render_custom_field_word_limit',
    ];
    // 返回带任意后缀的标签,让 Bricks 能解析 {custom_field_word_limit_xxx:n}
    return array_merge( $tags, bl_custom_field_word_limit_tag_variants() );
} );
// 动态生成变体标签(Bricks 需要标签名精确匹配才能出现在动态数据选择器里)
function bl_custom_field_word_limit_tag_variants() {
    $variants = [];
    $meta_keys = bl_get_all_meta_keys();
    foreach ( $meta_keys as $key ) {
        $variants[ 'custom_field_word_limit_' . $key ] = [
            'label' => 'Word Limit: ' . $key,
            'render' => 'bl_render_custom_field_word_limit',
        ];
    }
    return $variants;
}
// 扫描已使用的 meta key(简化版:白名单方式更稳,按需增删)
function bl_get_all_meta_keys() {
    global $wpdb;
    return $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->postmeta} WHERE meta_key NOT LIKE '\_%'" );
}
// 2) 渲染:截断 + 省略号
function bl_render_custom_field_word_limit( $tag, $post, $context, $name ) {
    // 从标签名提取字段名:custom_field_word_limit_page_description
    $field_name = str_replace( 'custom_field_word_limit_', '', $name );
    // 冒号后的数字参数 = 字数限制
    $limit = isset( $tag['args'][0] ) ? intval( $tag['args'][0] ) : 0;
    $value = get_post_meta( $post->ID, $field_name, true );
    if ( empty( $value ) || ! is_string( $value ) ) {
        return '';
    }
    if ( $limit > 0 ) {
        $words = preg_split( '/\s+/', trim( $value ) );
        if ( count( $words ) > $limit ) {
            // 超过限制:截断并追加省略号
            return implode( ' ', array_slice( $words, 0, $limit ) ) . '...';
        }
    }
    return $value;
}

补充说明:$wpdb 扫描所有 meta key 在字段多的大站上略重,生产环境建议改成在 bl_get_all_meta_keys() 里返回白名单数组,或把常用字段硬编码。

Step 2:模板中使用

在 Bricks 任意文本元素(Text / Rich Text)的动态数据里选择或直接手写:

{custom_field_word_limit_page_description:22}
  • 字段值 ≤ 22 词:原样输出。

  • 字段值 > 22 词:输出前 22 词 + ...。

  • 不带数字:{custom_field_word_limit_page_description} 输出完整值。

  • 在循环内使用:{post_id} 上下文自动切换为当前循环项,无需额外处理。

相关阅读:

适用场景与常见误区

这个字数标签适合:列表卡片截断自定义字段简介、归档页统一摘要长度、避免某篇字段特别长把排版撑破。误区:一是中英文混排时「字数」按字符数算,截断点和视觉长度不一致,按字符截断通常就够;二是忘了在白名单注册,前台不显示;三是截断后没加省略号,读着突兀。它和 WP 自带 post_excerpt 限字同一思路,只是把能力扩展到任意自定义字段。

中文小结

自定义字段限字数 + 省略号,Bricks 原生不提供,但注册自定义动态数据标签是标准解法:bricks/dynamic_data/tags 声明标签、render 回调里用 get_post_meta 取值、preg_split 按空格分词截断、超长补 ...。这套标签与字段插件无关(数据都在 wp_postmeta),ACF / Meta Box / JetEngine 通用。进阶方向:支持按字符截断(中文场景更适用)、支持 more 参数自定义省略号、或对 WYSIWYG 字段先剥离 HTML 再截断——核心渲染函数改几行即可。

延伸阅读

常见问题(FAQ)

这个标签和 post_excerpt 限字一样吗? 思路一样,区别是它能作用于任意自定义字段,而不只是文章摘要。

中英文截断为什么不一致? 字数按字符数算,中英字符宽度不同,视觉长度会有差;按字符截断通常够用。

前台不显示先查什么? 确认标签在白名单注册了,且字段名拼写和 ACF 里一致。

截断后怎么加省略号? 在标签逻辑里判断超长时追加「…」,读起来更自然。

Ray Chan

站长

Ray Chan

WordPress Developer & Bricks Specialist

WordPress developer with 10+ years of client builds. Switched to Bricks in 2023 — now builds fast WordPress sites and migrates legacy Elementor/Divi projects.

延伸阅读