WordPress后台用户列表添加ACF字段与用户ID列报错求助
问题分析与解决思路
嘿,我一眼就发现你遇到的问题根源了——你重复定义了同名的PHP函数!在PHP里,同一个作用域下不能存在两个同名函数,当你同时添加Col1和Col2的代码时,第二个column_register_wpse_101322和column_display_wpse_101322函数会试图覆盖第一个,直接触发「Cannot redeclare function」的致命错误,导致页面无法正常加载。
另外,你第一个列的显示函数参数顺序也写错了:manage_users_custom_column钩子的参数顺序是$empty, $column_name, $user_id,但你写成了$post_id, $column_name, $opiekunklienta,这也会导致字段值无法正确获取。
修正后的完整代码
把两个列的函数分别重命名,并且修正参数顺序,就能同时正常显示两个自定义列了:
// --- Col 1: Opiekun (ACF字段列) --- add_filter( 'manage_users_columns', 'column_register_account_manager' ); add_filter( 'manage_users_custom_column', 'column_display_account_manager', 10, 3 ); function column_register_account_manager( $columns ) { $columns['accountmanager_col'] = 'Opiekun'; return $columns; } function column_display_account_manager( $empty, $column_name, $user_id ) { if ( 'accountmanager_col' !== $column_name ) { return $empty; } // 获取ACF自定义字段值 $opiekunklienta_code = get_user_meta( $user_id, 'opiekun_klienta', true ); return "<strong>{$opiekunklienta_code}</strong>"; } // ---- Col 2: 用户ID列 ---- add_filter( 'manage_users_columns', 'column_register_user_id' ); add_filter( 'manage_users_custom_column', 'column_display_user_id', 10, 3 ); function column_register_user_id( $columns ) { $columns['uid'] = 'ID'; return $columns; } function column_display_user_id( $empty, $column_name, $user_id ) { if ( 'uid' !== $column_name ) { return $empty; } return "<strong>{$user_id}</strong>"; }
关键修正点说明
- 给每个列的注册/显示函数赋予唯一的名称(比如
column_register_account_manager和column_register_user_id),彻底避免函数名冲突 - 修正了第一个显示函数的参数顺序,确保
$user_id能正确传递给get_user_meta获取字段值 - 用严格不等号
!==替代!=,提升代码逻辑的严谨性 - 改用PHP字符串插值
{$opiekunklienta_code}替代字符串拼接,让代码更易读维护
这样修改后,两个自定义列就能同时在用户列表页面正常显示啦!
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

