使用WPGraphQL查询自定义term_meta字段返回空值问题
解决WPGQL查询标签自定义color字段返回空值的问题
问题根源在于resolve函数中获取标签ID的方式错误:WPGQL传递给resolve函数的$term是GraphQL的Term对象,它的ID属性是GraphQL全局ID,而非数据库中的term_id;正确的数据库ID属性是termId。
修正后的代码方案
方案一:直接使用termId获取元数据
add_action( 'graphql_register_types', function() { register_graphql_field( 'Tag', 'tagColor', [ 'type' => 'String', 'description' => __( 'Tag color', 'wp-graphql' ), 'resolve' => function( $term ) { // 使用termId而非ID获取数据库中的term_id $tagColor = get_term_meta( $term->termId, 'color', true ); return ! empty( $tagColor ) ? $tagColor : ''; } ] ); } );
方案二:先获取真实WP_Term对象(更稳妥)
如果需要对标签做更多校验或操作,先获取原生WP_Term对象再处理:
add_action( 'graphql_register_types', function() { register_graphql_field( 'Tag', 'tagColor', [ 'type' => 'String', 'description' => __( 'Tag color', 'wp-graphql' ), 'resolve' => function( $term ) { // 通过termId获取原生WP_Term对象 $wp_term = get_term( $term->termId ); // 校验标签是否有效 if ( ! $wp_term || is_wp_error( $wp_term ) ) { return ''; } $tagColor = get_term_meta( $wp_term->term_id, 'color', true ); return ! empty( $tagColor ) ? $tagColor : ''; } ] ); } );
验证方式
修改代码后,重新执行GraphQL查询:
{ tags { nodes { name tagColor } } }
此时应该能正确返回wp_termmeta表中存储的color字段值。
内容的提问来源于stack exchange,提问作者budgiebeaks
相关产品推荐
相关产品推荐

