为什么当我将GET_POST_META指定为SINGLE时,它会返回数组?

时间:2015-06-10 作者:Pete

这个documentation 从…起get_post_meta 听起来好像single 参数将确定是否在数组中返回元值。例如:

// If I set single to false, or leave it blank it\'s returned as an array
[my-meta] => Array
    (
        [0] => my-value
    )

// If I set single to true, it\'s returned as a string
[my-meta] = my-value
如果我只返回单个元键的数据,这就可以了。。。但如果我想返回所有元数据,但将它们全部作为字符串返回(单个),则会失败。

要获取所有具有字符串值的元值,正确的调用应该是:

$meta = get_post_meta( $transaction->ID, false, true );
但这会返回数组值,并完全忽略single 价值

为什么?有没有一种方法可以获取所有元数据,但不需要使用单元素数组?对我来说,这些都是不必要的。

编辑:为了澄清我的问题,我会撒谎来获得所有的元,如下所示:

array() {
    [my-meta-1] = my-value
    [my-meta-2] = my-value
    [my-meta-3] = my-value
    [my-meta-4] = my-value
}
而不是像这样(这似乎是我唯一能做到的行为):

array() {
    [my-meta-1] => Array
    (
        [0] => my-value
    )
    [my-meta-2] => Array
    (
        [0] => my-value
    )
    [my-meta-3] => Array
    (
        [0] => my-value
    )
    [my-meta-4] => Array
    (
        [0] => my-value
    )
}

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

如果我只返回单个元键的数据,这就可以了。。。但如果我想返回所有元数据,但将它们全部作为字符串返回(单个),则会失败。

这没有多大意义。PHP中的函数只能返回单个值,因此无法将所有元数据作为字符串返回(复数)。它必须显示为数组或对象。这就是函数所做的--你得到一个字符串或数组形式的值。如果您没有指定密钥,那么代码无法知道您想要哪个密钥,因此您可以通过defaurl获得所有密钥not 仅有一个的当您不检索单个值时,WordPress不会折叠嵌套数组。如果这是您想要的,请与Trac上的核心开发人员讨论。同时,自己折叠阵列:

$meta = get_post_meta(350);
var_dump($meta);
foreach ($meta as $k => $v) {
  $meta[$k] = array_shift($v);
}
或:

foreach ($meta as &$v) {
  $v = array_shift($v);
}
这可能不是你所希望的答案,但我很肯定它是准确的。可能有一个过滤器,但我怀疑这样做是否值得。

SO网友:Armstrongest

一个简短的小功能,也许:

function get_post_meta_single( $id ) {
  $m = get_post_meta( $id, false, true );    // get post meta as singles
  foreach( $m as &$v ) $v = array_shift($v); // collapse value array
  return $m;
}
另一方面,WordPress不折叠数组的原因可能是为了保持一致性,因此可以对具有多个值和单个值的项目重用相同的代码。记住,WordPress是关于循环的。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在