Ultimate Member表单自定义下拉框存储ID而非名称求助
解决Ultimate Member自定义下拉字段存储ID而非俱乐部名称的问题
问题根源分析
你的代码存在几个关键错误,导致Ultimate Member无法正确存储俱乐部名称:
- 表名错误:
$wpdb->prefix已经包含默认的wp_前缀,拼接成$wpdb->prefix . 'wp_Club'会生成wp_wp_Club,这不是你的实际表名。 - 字段名不匹配:SQL查询的是
ClubNames字段,但循环中读取的是$row['Club'],字段名不一致会导致数组为空,UM只能用数组索引(类似ID)作为存储值。 - 数组格式错误:Ultimate Member的下拉字段要求返回关联数组(键为存储值,值为显示文本),你之前的索引数组会让UM默认存储数组的索引序号。
- 函数名大小写不一致:函数定义是
ClubCallback(大写C),但add_shortcode里写的是clubCallback(小写c),PHP函数名大小写敏感,会导致回调失效。
修正后的代码
function ClubCallback() { global $wpdb; // 修正表名:去掉重复的wp_前缀 $table_name = $wpdb->prefix . 'Club'; // 查询时确保字段名和表中实际字段一致,这里假设字段是ClubNames $query = "SELECT ClubNames FROM $table_name"; $results = $wpdb->get_results($query, ARRAY_A); $club_options = array(); // 构造关联数组:键和值都用俱乐部名称,这样存储的就是名称而非索引 foreach ($results as $row) { $club_name = $row['ClubNames']; if (!empty($club_name)) { $club_options[$club_name] = $club_name; } } // 去重并返回 return array_unique($club_options); } // 修正函数名大小写,和定义一致 add_shortcode('ClubCallback', 'ClubCallback');
额外注意事项
- 确认你的俱乐部表中实际存储名称的字段是
ClubNames,如果字段名不同(比如club_name),要同步修改SQL查询和循环中的字段名。 - 确保该自定义字段在Ultimate Member的字段设置中,回调函数名称填写的是
ClubCallback,和代码中的短码/函数名一致。
内容的提问来源于stack exchange,提问作者Diamond D
相关产品推荐
相关产品推荐

