使用GET_POST_META遍历所有元键

时间:2019-05-01 作者:Jobbie Daddy

我正在构建一个定制的解决方案,其中我需要获得一个数组中帖子的所有元值。我有很多“钥匙”。有没有一种方法可以在不这样做的情况下循环所有这些内容?我在脚本中的这一点上有帖子ID。

$image_meta =  get_post_meta( $post->ID, \'image\', true );

// car year

$car_year = get_post_meta( $post->ID, \'car_year\', true );

// car mileage

$car_mileage = get_post_meta( $post->ID, \'car_mileage\', true );

// car price

$car_price = get_post_meta( $post->ID, \'car_price\', true );

// car model

$car_model = get_post_meta( $post->ID, \'car_model\', true );

2 个回复
SO网友:phatskat

正如@Sally CJ在对您的问题的评论中所指出的,您应该省略元键:

$meta = get_post_meta( $post->ID, \'\', true );

echo $meta[\'car_year\']; // 2005
在PHP 7.1中,可以使用array destructing:

[
    \'image_meta\'  => $image_meta,
    \'car_year\'    => $car_year,
    \'car_mileage\' => $car_mileage,
    \'car_price\'   => $car_price,
    \'car_model\'   => $car_model,
] = get_post_meta( $post->ID, \'\', true );

echo $car_year; // 2005

SO网友:Antti Koskinen

我过去也有类似的需求array destructing @phatskat提到我创建了一个助手函数来完成循环。

辅助函数,

function get_keyed_meta_data_array( int $post_id, array $keys ) {
  $keyed_meta = array();
  $post_meta = get_post_meta( $post_id, \'\', true );

  foreach ( $keys as $key ) {
    if ( isset( $post_meta[$key] ) ) {
      $keyed_meta[$key] = $post_meta[$key];
    } else {
      $keyed_meta[$key] = \'\';
    }
  }

  return $keyed_meta;
}
用途,

$keys = array(
  \'image\',
  \'car_year\',
  \'car_mileage\',
  \'car_price\',
  \'car_model\'
); // key array could also be returned from a config function for DRY purposes

$data = get_keyed_meta_data_array( $post->ID, $keys );
// $data[\'car_year\'] = 2019;
// $data[\'car_mileage\'] = 123;    
// $data[\'car_model\'] = \'\';

相关推荐

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

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