如何用PHP获取WordPress Custom Post Types数据并正常显示前端表格
问题原因
代码存在3处错误,直接导致字段值无法正常显示、表格结构错乱:
- PHP语法错误:判断条件写为
if(get_rates_list),遗漏PHP变量必须的$前缀,正确写法为if($get_rates_list),原判断逻辑完全失效,循环无法正常执行。 - 表格结构错误:
<thead>表头、<tbody>起始标签被放在foreach循环内部,每遍历一条数据就会重复生成表头,DOM结构不符合HTML表格规范,会导致渲染异常。 - 字段绑定缺失:Duration对应的
<td>标签内部为空,没有输出对应时长字段的值,因此该列始终显示空白。
相关异常截图


修复后代码
<table class="rates-table"> <?php $get_rates_list = get_field('rates_optional'); if($get_rates_list): ?> <!-- 表头移到循环外,全局仅渲染一次 --> <thead> <tr> <td><h3 class="inside-model-single">Duration</h3></td> <td><h3 class="inside-model-single">Incall</h3></td> <td><h3 class="inside-model-single">Outcall</h3></td> </tr> </thead> <tbody> <?php foreach($get_rates_list as $rate):?> <tr> <!-- 补全Duration列字段输出,若你的时长字段键名不是duration,替换为实际键名即可 --> <td><?php echo esc_html($rate['duration']); ?></td> <td><span class="rate_value"><?php echo esc_html($rate['incall_1_hour']);?></span></td> <td><span class="rate_value"><?php echo esc_html($rate['outcall_1_hour']);?></span></td> </tr> <?php endforeach; ?> </tbody> <?php endif; ?> </table>
提示:输出自定义字段内容时添加
esc_html()是WordPress开发的安全规范,可以避免XSS注入风险。如果你的Duration字段在ACF后台设置的键名不是duration,把对应键名替换成你实际配置的值即可正常显示。
内容的提问来源于stack exchange,提问作者Imran Irshad
相关产品推荐
相关产品推荐

