在WordPress后台展示文章、产品、分类及标签ID并调整列位置
解决WordPress后台显示文章/产品/分类/标签ID并调整列位置的问题
问题分析
- 分类/标签ID不显示:分类/标签的自定义列钩子
manage_{taxonomy}_custom_column参数顺序为($content, $column_name, $term_id),和文章类的manage_{post_type}_custom_column参数($column, $post_id)不一致,原函数参数不匹配导致无法输出ID。 - 移动列触发致命错误:原数组切片逻辑未考虑不同类型列表的列结构差异,直接切片可能导致数组操作异常。
完整修复代码
替换原functions.php中的相关代码即可:
// 为所有文章/产品/分类/标签添加ID列 add_filter('manage_posts_columns', 'revealid_add_id_column', 5); add_filter('manage_pages_columns', 'revealid_add_id_column', 5); // 遍历所有公开自定义文章类型 $custom_post_types = get_post_types([ 'public' => true, '_builtin' => false // 如需仅显示内置类型(文章/页面/产品)可改为true ], 'names'); foreach ($custom_post_types as $post_type) { add_filter("manage_edit-{$post_type}_columns", 'revealid_add_id_column', 5); } // 遍历所有公开分类法 $taxonomies = get_taxonomies(['public' => true], 'names'); foreach ($taxonomies as $taxonomy) { add_filter("manage_edit-{$taxonomy}_columns", 'revealid_add_id_column', 5); } // 处理文章/产品的ID列内容 add_action('manage_posts_custom_column', 'revealid_post_id_content', 5, 2); add_action('manage_pages_custom_column', 'revealid_post_id_content', 5, 2); foreach ($custom_post_types as $post_type) { add_action("manage_{$post_type}_custom_column", 'revealid_post_id_content', 5, 2); } // 处理分类/标签的ID列内容 foreach ($taxonomies as $taxonomy) { add_filter("manage_{$taxonomy}_custom_column", 'revealid_taxonomy_id_content', 5, 3); } // 将ID列插入到复选框后的第一位置 function revealid_add_id_column($columns) { // 提取并移除复选框列(如果存在) $checkbox_col = []; if (isset($columns['cb'])) { $checkbox_col['cb'] = $columns['cb']; unset($columns['cb']); } // 构建ID列 $id_col = ['revealid_id' => '(ID)']; // 合并列顺序:复选框 → ID列 → 原有剩余列 return array_merge($checkbox_col, $id_col, $columns); } // 输出文章/产品的ID function revealid_post_id_content($column, $post_id) { if ($column === 'revealid_id') { echo $post_id; } } // 输出分类/标签的ID(过滤器需返回内容) function revealid_taxonomy_id_content($content, $column, $term_id) { if ($column === 'revealid_id') { return $term_id; } return $content; }
代码说明
- 钩子类型区分处理:
- 文章/产品用动作钩子
manage_{post_type}_custom_column,直接输出ID; - 分类/标签用过滤器钩子
manage_{taxonomy}_custom_column,需返回ID内容(过滤器必须返回值)。
- 文章/产品用动作钩子
- 安全调整列位置:
- 先判断复选框列
cb是否存在,避免因列表结构差异导致的数组错误; - 通过移除再合并的方式,确保ID列稳定放在复选框之后。
- 先判断复选框列
- 覆盖所有公开类型:
- 遍历所有公开的自定义文章类型和分类法,确保文章、产品、分类、标签都能显示ID列。
注意事项
- 代码可添加到主题
functions.php,或封装为自定义插件(推荐,避免主题更新丢失代码); - 可通过调整
get_post_types和get_taxonomies的参数,过滤不需要显示ID的类型。
内容的提问来源于stack exchange,提问作者php
相关产品推荐
相关产品推荐

