/**
* List all metadata associated with an object.
*
* <id>
* : ID for the object.
*
* [--keys=<keys>]
* : Limit output to metadata of specific keys.
*
* [--fields=<fields>]
* : Limit the output to specific row fields. Defaults to id,meta_key,meta_value.
*
* [--format=<format>]
* : Accepted values: table, csv, json, count. Default: table
*
* @subcommand list
*/
public function list_($args, $assoc_args)
{
list($object_id) = $args;
$keys = !empty($assoc_args['keys']) ? explode(',', $assoc_args['keys']) : array();
$object_id = $this->check_object_id($object_id);
$metadata = get_metadata($this->meta_type, $object_id);
if (!$metadata) {
$metadata = array();
}
$items = array();
foreach ($metadata as $key => $values) {
// Skip if not requested
if (!empty($keys) && !in_array($key, $keys)) {
continue;
}
foreach ($values as $item_value) {
$item_value = maybe_unserialize($item_value);
$items[] = (object) array("{$this->meta_type}_id" => $object_id, 'meta_key' => $key, 'meta_value' => $item_value);
}
}
if (!empty($assoc_args['fields'])) {
$fields = explode(',', $assoc_args['fields']);
} else {
$fields = $this->get_fields();
}
$formatter = new \WP_CLI\Formatter($assoc_args, $fields, $this->meta_type);
$formatter->display_items($items);
}