$meta = get_post_meta($post_id,'',true);
返回$ post_id的所有元值,但它为每个值返回一个数组,如下所示:
如果我将第三个参数 - single - 设置为false但是设置为true,我可能会期待这个。我还没有在codex中找到任何关于key为空的时候返回的内容。
有人必须在这里获取信息并知道我如何能够取回所有键,每个键值是单个值而不是值数组?
答案 0 :(得分:5)
答案是:这是设计上的,但似乎没有在食典委中记录。
如果查看真实文档(源代码),您会看到get_post_meta
调用get_metadata
。通过检查get_metadata
的代码,我们可以看到,如果$meta_key
未发布,那么它会在评估之前返回值,如果设置了$single
:
// Previously, $meta_cache is set to the contents of the post meta data
// Here you see if there is no key set, it just returns it all
if ( ! $meta_key ) {
return $meta_cache;
}
// It's not until later than $single becomes a factor
if ( isset($meta_cache[$meta_key]) ) {
if ( $single )
return maybe_unserialize( $meta_cache[$meta_key][0] );
else
return array_map('maybe_unserialize', $meta_cache[$meta_key]);
}
如果您使用的是PHP 5.3+,您可以通过以下方式获得所需内容:
// Get the meta values
$meta = get_post_meta($post_id,'',true);
// Now convert them to singles
$meta = array_map(function($n) {return $n[0];}, $meta);
或者,如果你想变得非常花哨,你可以围绕get_post_meta函数编写自己的“包装器”,如下所示:
function get_all_post_meta($post_id) {
// Get the meta values
$meta = get_post_meta($post_id,'');
// Now convert them to singles and return them
return array_map(function($n) {return $n[0];}, $meta);
}
然后您可以这样使用:
$meta = get_all_post_meta($post_id);
或者,如果你不是PHP 5.3+(你应该是!),你可以这样做:
function get_all_post_meta($post_id) {
// Get the meta values
$meta = get_post_meta($post_id,'');
foreach($meta AS $key => $value) {
$meta[$key] = $value[0];
}
return $meta;
}
答案 1 :(得分:0)
我认为,当$ single为true时,get_post_meta中无法获得单个值。所以你编写了一个自定义函数来实现它。
使用
//callback to get single value in get_meta_data
function get_single_value($val) {
return $val[0];
}
$meta = get_post_meta($post_id,'', true);
$meta1 = array_map('get_postmeta_single_value', $meta);
print_r($meta1);