WordPress中get_term_meta函数无法获取$term_id值问题求助
解决WordPress分类自定义字段无法显示的问题
我来帮你排查下这个问题!你已经完成了自定义字段的添加和保存,但用get_term_meta拿不到值,大概率是**$term_id没有正确获取**,或者有其他细节没注意到,咱们一步步来:
1. 先确认$term_id是否正确获取到
这是最常见的问题!不同的模板上下文里,$term_id的获取方式不一样:
- 如果是在分类归档页面(比如
category.php或taxonomy-{taxonomy}.php):
你可以通过get_queried_object()拿到当前分类的对象,再提取ID:// 获取当前分类对象 $current_term = get_queried_object(); if ($current_term && isset($current_term->term_id)) { // 拿到正确的term_id后再取值 $section_value = get_term_meta($current_term->term_id, 'site_section_1', true); echo $section_value; } else { echo '当前没有有效的分类对象'; } - 如果是在循环遍历多个分类(比如显示分类列表):
要确保循环里的每个分类对象都正确,比如:$categories = get_terms(array( 'taxonomy' => 'category', // 替换成你的分类法slug 'hide_empty' => false )); foreach ($categories as $category) { $section_value = get_term_meta($category->term_id, 'site_section_1', true); echo $category->name . ': ' . $section_value . '<br>'; }
2. 检查自定义字段的键名是否完全匹配
一定要保证取值时的键名site_section_1和你保存时用的键名完全一致——包括大小写、下划线、有没有空格,哪怕差一个字符都拿不到值!
3. 确认自定义字段真的存在于数据库
可以直接登录你的数据库,查看wp_termmeta表(前缀可能不是wp_,看你的配置),找对应分类ID的记录,看看有没有meta_key为site_section_1的条目,以及meta_value是否有内容。
如果数据库里没有这条记录,那说明你之前写的保存自定义字段的代码有问题,可以检查一下保存逻辑:
比如分类编辑页面的保存钩子是否正确:
// 保存分类自定义字段 function save_category_custom_meta($term_id) { // 确保是当前用户有权限,并且字段存在 if (!current_user_can('edit_category', $term_id)) { return; } if (isset($_POST['site_section_1'])) { // 清理输入内容再保存 update_term_meta( $term_id, 'site_section_1', sanitize_text_field($_POST['site_section_1']) ); } } add_action('edited_category', 'save_category_custom_meta');
4. 验证get_term_meta的参数
你用的get_term_meta($term_id, 'site_section_1', true)是对的——第三个参数true表示返回单个值(而不是数组),如果你的字段是数组类型才需要改成false,但看起来你这里是单个值,所以没问题。
先从第一步检查$term_id的获取开始,这通常就能解决问题啦!
内容的提问来源于stack exchange,提问作者pdas
相关产品推荐
相关产品推荐

