文章列表多出一列「同步状态」,表头正常,每一行对应位置却是空白。列宽也占着,翻页之后仍然一样,列里连占位符都没有。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

add_filter("manage_post_posts_columns", function ($c) { $c["abc_sync"] = "同步状态"; return $c; });
add_action("manage_post_posts_custom_column", function ($col, $id) {
    if ($col === "abc_sync") { echo esc_html(get_post_meta($id, "abc_status", true) ?: "未同步"); }
}, 10, 2);

只挂了加表头的过滤器,输出单元格内容的动作没挂,或者动作名里的文章类型写错了。表头和数据是两套钩子,缺一个就只剩空列。这一点先确认清楚,后面就不用反复试。

「后台自定义列」这类改动最怕改一半,回滚脚本先准备好,再动生产。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,补上输出钩子 名字里的文章类型要和列表页一致;回调里按列名判断 只处理自己这一列;值从元数据取时确认键名和保存时用的完全一样。

改完照着核一遍,列表每一行的同步状态列都有值,未同步的显示「未同步」而不是空白。

作者 9823189