所有键的get_post_meta都会返回数组,而不是单个值

时间:2016-01-27 02:50:13

标签: wordpress

$meta = get_post_meta($post_id,'',true);

返回$ post_id的所有元值,但它为每个值返回一个数组,如下所示: enter image description here

如果我将第三个参数 - single - 设置为false但是设置为true,我可能会期待这个。我还没有在codex中找到任何关于key为空的时候返回的内容。

有人必须在这里获取信息并知道我如何能够取回所有键,每个键值是单个值而不是值数组?

2 个答案:

答案 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);