Get_*_meta并不总是返回数组

时间:2014-03-16 作者:M Miller

我觉得这样的功能很烦人get_user_metaget_post_meta 如果元键存在,将返回一个数组;如果不存在,将返回false。这意味着我需要执行如下检查:

$meta = get_post_meta($id, $meta_key);
if ($meta) {
    foreach ($meta as $value) {
        // ...
    }
}
我希望有一种方法,我不必首先检查它是否是虚假的值。

3 个回复
SO网友:M Miller

我使用以下逻辑规范化这些函数的输出:

将值强制转换为数组。如果它不是一个数组,它将被转换为一个包含一个元素的数组,该元素就是它原来的值,例如。(array) false 成为array (false).使用array_filter, 当没有传递可调用的时,它只会从数组中过滤虚假值

foreach (array_filter((array) get_post_meta($id, $meta_key)) as $value) {
    // ...
}
Warning: 这将去除所有虚假值,例如,如果元值为零或空字符串,则不会对其进行迭代。

SO网友:kaiser

如果您总是需要一个数组,只需使用get_post_custom( get_the_ID() ) 并按键提取所需的值。

$meta = get_post_custom( get_the_ID() );
$target = ! isset( $meta[\'your_key\'] ) ?: $meta[\'your_key\'];
您的返回值将为FALSE (因此您可以使用! 或者你的价值。

SO网友:s_ha_dum

get_post_meta() 不返回false 如果密钥不存在。

返回值如果只设置了$id,它将返回关联数组中的所有元值

  • 如果$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();
    

  • 结束

    相关推荐

    将FTP详细信息存储在wp-config.php中

    我想了解在wp config中存储FTP详细信息的安全问题。共享服务器上的php。这对我来说“感觉”不安全。我正在使用ManageWP控制共享服务器上的站点,并且必须为每次更新手动输入FTP详细信息。