为WordPress自定义文章类型Projects添加作者城市元数据列
解决WordPress自定义文章类型
Projects添加作者城市列无数据的问题 我刚踩过这个坑——之前给自定义文章类型Projects加了个显示作者城市的列,标题能正常出来,但列里就是没数据,明明这个城市数据在网站其他地方都能正常展示。折腾了一会儿终于搞定了,分享下具体步骤:
解决方案步骤
1. 注册新列的标题
用manage_{post_type}_posts_columns钩子来添加列标题,这里的{post_type}要替换成你的自定义文章类型slug(也就是projects):
add_filter('manage_projects_posts_columns', 'add_author_city_column'); function add_author_city_column($columns) { // 可以选择把新列插到指定位置,比如默认"作者"列的后面 $new_columns = []; foreach ($columns as $key => $title) { $new_columns[$key] = $title; if ($key === 'author') { $new_columns['author_city'] = __('作者城市', 'your-theme-domain'); } } return $new_columns; // 如果不需要指定位置,直接追加也可以: // $columns['author_city'] = __('作者城市', 'your-theme-domain'); // return $columns; }
2. 渲染列内的城市数据
这一步是核心!之前我就是没处理好这个钩子导致数据不显示。用manage_{post_type}_posts_custom_column钩子来填充具体数据:
add_action('manage_projects_posts_custom_column', 'render_author_city_column', 10, 2); function render_author_city_column($column, $post_id) { // 只处理我们新增的author_city列 if ($column !== 'author_city') { return; } // 获取当前文章的作者ID $author_id = get_post_field('post_author', $post_id); // 替换成你实际存储作者城市的用户元字段键名,比如我用的是'user_city' $author_city = get_user_meta($author_id, 'user_city', true); // 输出数据,记得用esc_html转义防止XSS风险 echo !empty($author_city) ? esc_html($author_city) : __('暂无城市信息', 'your-theme-domain'); }
关键注意事项
- 把
your-theme-domain替换成你主题或插件的文本域,方便后续做国际化翻译 - 确认
user_city是你实际存储作者城市的元字段键名,必须和网站其他地方调用该数据时用的键名完全一致 - 确保自定义文章类型的slug确实是
projects,如果不是,把钩子中的projects替换成对应的slug即可
内容的提问来源于stack exchange,提问作者edit7279
相关产品推荐
相关产品推荐

