You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WordPress后台展示文章、产品、分类及标签ID并调整列位置

解决WordPress后台显示文章/产品/分类/标签ID并调整列位置的问题

问题分析

  1. 分类/标签ID不显示:分类/标签的自定义列钩子manage_{taxonomy}_custom_column参数顺序为($content, $column_name, $term_id),和文章类的manage_{post_type}_custom_column参数($column, $post_id)不一致,原函数参数不匹配导致无法输出ID。
  2. 移动列触发致命错误:原数组切片逻辑未考虑不同类型列表的列结构差异,直接切片可能导致数组操作异常。

完整修复代码

替换原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;
}

代码说明

  1. 钩子类型区分处理:
    • 文章/产品用动作钩子manage_{post_type}_custom_column,直接输出ID;
    • 分类/标签用过滤器钩子manage_{taxonomy}_custom_column,需返回ID内容(过滤器必须返回值)。
  2. 安全调整列位置:
    • 先判断复选框列cb是否存在,避免因列表结构差异导致的数组错误;
    • 通过移除再合并的方式,确保ID列稳定放在复选框之后。
  3. 覆盖所有公开类型:
    • 遍历所有公开的自定义文章类型和分类法,确保文章、产品、分类、标签都能显示ID列。

注意事项

  • 代码可添加到主题functions.php,或封装为自定义插件(推荐,避免主题更新丢失代码);
  • 可通过调整get_post_types和get_taxonomies的参数,过滤不需要显示ID的类型。

内容的提问来源于stack exchange,提问作者php

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:25:35