get_post_meta()
不返回false
如果密钥不存在。
返回值如果只设置了$id,它将返回关联数组中的所有元值如果将$single设置为false或留空,则函数将返回一个包含指定键的所有值的数组
如果$single设置为true,则函数将返回指定键(不在数组中)的第一个值如果没有要返回的内容,函数将返回一个空数组,除非$single设置为true,在这种情况下,将返回一个空字符串。
http://codex.wordpress.org/Function_Reference/get_post_meta#Return_Value
如果你看看来源,你会看到get_post_meta()
is a wrapper around get_metadata()
用于在多个不同上下文中检索数据。get_metadata()
将返回false
如果您提供了非常糟糕的信息,但get_post_meta()
包装,除非ID未设置或为空或设置为不会转换为int的内容。例如:
$meta = get_post_meta($id, \'nonexistent\');
var_dump($meta);
或$id = \'\';
$meta = get_post_meta($id, \'nonexistent\');
var_dump($meta);
或$id = \'abc\';
$meta = get_post_meta($id, \'nonexistent\');
var_dump($meta);
鉴于,设置$id
任何整数或数字字符串将导致空数组。你对函数的分析是错误的。在调用get_post_meta()
. 你真的应该检查一下$id
在尝试使用之前是正确的。
从另一个角度来看,简单地为所有情况返回一个空数组将为需要它的应用程序提供更少的反馈和信息。如果您不需要额外的反馈,那么代码很简单,可以通过多种方式进行处理。我更喜欢:
$id = \'abc\';
$meta = get_post_meta($id, \'abcdbroken\');
if (!empty($meta)) {
foreach ($meta as $value) {
// ...
}
}
但如果您的PHP足够新,还可以使用一个三元快捷方式,这使得代码非常简洁:$meta = (get_post_meta($id, \'abcdbroken\')) ?: array();