WordPress使用get_post_custom取offer字段email值输出NULL如何解决
问题根源
get_post_custom()方法返回的是文章所有自定义字段的二维数组,每个字段名对应的取值默认存储为数组格式,即使字段仅有一个值也会包裹在数组第一层,要读取单个字段值需要先取对应键下索引为0的元素- 你存储的
offer字段是序列化字符串,必须先反序列转为PHP可识别的数组/对象结构才能读取内部的email子键,你直接读取的$my_custom_field['email']属于读取自定义字段的顶级键,实际不存在因此返回NULL - 直接遍历未反序列化的序列化字符串时,PHP会将字符串按单个字符拆解遍历,序列化字符串的首个字符是
s,因此你遍历输出的结果就是string(1) "s"
实现仅输出email对应值的代码
// 获取当前文章所有自定义字段 $all_custom_fields = get_post_custom(); // 先判断offer字段是否存在 if (isset($all_custom_fields['offer'])) { // 取出offer字段的原始序列化值 $offer_raw = $all_custom_fields['offer'][0]; // 使用WordPress内置的安全反序列化方法处理,避免非序列化内容报错 $offer_data = maybe_unserialize($offer_raw); // 安全读取email值,避免键不存在抛出警告 $email = $offer_data['email'] ?? ''; // 输出前转义,符合WordPress安全规范 echo esc_html($email); }
内容的提问来源于stack exchange,提问作者Sanad
相关产品推荐
相关产品推荐

