使用Toolset创建的自定义Term字段无法通过get_terms()获取
解决Toolset自定义Term字段在
get_terms()中缺失的问题 我明白你遇到的困扰了——默认的get_terms()函数只会返回WordPress原生的分类属性(比如slug、description这些),Toolset创建的自定义Term字段不会自动包含在返回的结果里。别担心,有几种简单可靠的方法可以获取到这个字段的值:
方法1:使用Toolset官方提供的函数
Toolset自带了专门用于处理Term元数据的函数,推荐优先使用这种方式,因为它会自动适配Toolset字段的格式(比如图片字段会返回正确的附件ID,无需手动处理前缀):
$terms = get_terms( array( 'taxonomy' => 'client', 'hide_empty' => false, ) ); foreach ( $terms as $term ) { // 获取client-logo-image字段的原始值(比如图片的附件ID) $client_logo_id = types_get_termmeta( $term->term_id, 'client-logo-image', true ); // 如果是图片字段,用WordPress原生函数生成图片HTML if ( $client_logo_id ) { $client_logo_html = wp_get_attachment_image( $client_logo_id, 'full' ); echo $client_logo_html; } // 也可以直接让Toolset帮你渲染字段(自动处理显示逻辑) // echo types_render_termmeta( 'client-logo-image', array( 'term_id' => $term->term_id ) ); }
方法2:使用WordPress原生get_term_meta()函数
Toolset现在会把自定义Term字段存储在标准的wp_termmeta表中,字段名会自动添加wpcf-前缀。你也可以直接用原生函数获取:
$terms = get_terms( array( 'taxonomy' => 'client', 'hide_empty' => false, ) ); foreach ( $terms as $term ) { // 注意字段名要加上Toolset的默认前缀wpcf- $client_logo_id = get_term_meta( $term->term_id, 'wpcf-client-logo-image', true ); if ( $client_logo_id ) { $client_logo_html = wp_get_attachment_image( $client_logo_id, 'full' ); echo $client_logo_html; } }
额外优化:预加载元数据提升性能
如果你的分类数量较多,循环中逐个获取元数据会产生多次数据库查询,影响性能。可以在get_terms()之后预加载所有分类的元数据,后续调用get_term_meta()就不会重复查询了:
$terms = get_terms( array( 'taxonomy' => 'client', 'hide_empty' => false, ) ); // 提取所有分类ID,预加载对应的元数据 $term_ids = wp_list_pluck( $terms, 'term_id' ); update_term_meta_cache( $term_ids ); // 后续循环获取字段会更高效 foreach ( $terms as $term ) { $client_logo_id = get_term_meta( $term->term_id, 'wpcf-client-logo-image', true ); // ... 你的后续处理逻辑 }
这样就能顺利获取到你创建的client-logo-image字段值啦!
内容的提问来源于stack exchange,提问作者Nikola Mitic
相关产品推荐
相关产品推荐

