/** * Retrieves registered metadata for a specified object. * * @since 4.6.0 * * @param string $object_type Type of object to request metadata for. (e.g. comment, post, term, user) * @param string $object_subtype The subtype of the object's type to request metadata for. (e.g. custom post type) * @param int $object_id ID of the object the metadata is for. * @param string $meta_key Optional. Registered metadata key. If not specified, retrieve all registered * metadata for the specified object. * * @return mixed|WP_Error */ function get_registered_metadata($object_type, $object_subtype, $object_id, $meta_key = '') { global $wp_meta_keys; if (!is_array($wp_meta_keys)) { return new WP_Error('invalid_meta_key', __('Invalid meta key. Not registered.')); } if (!wp_object_type_exists($object_type)) { return new WP_Error('invalid_meta_key', __('Invalid meta key. Not a core object type.')); } if (!empty($meta_key)) { if (!registered_meta_key_exists($object_type, $object_subtype, $meta_key)) { return new WP_Error('invalid_meta_key', __('Invalid meta key. Not registered.')); } $meta_keys = get_registered_meta_keys($object_type, $object_subtype); $meta_key_data = $meta_keys[$meta_key]; $data = get_metadata($object_type, $object_id, $meta_key, $meta_key_data['single']); return $data; } $data = get_metadata($object_type, $object_id); $meta_keys = get_registered_meta_keys($object_type, $object_subtype); $registered_data = array(); // Someday, array_filter() foreach ($meta_keys as $k => $v) { if (isset($data[$k])) { $registered_data[$k] = $data[$k]; } } return $registered_data; }
public function test_get_registered_meta_keys_invalid_arg() { register_meta('post', 'registered_key1', array('invalid_arg' => 'invalid')); $meta_keys = get_registered_meta_keys('post'); unregister_meta_key('post', 'registered_key1'); $this->assertArrayNotHasKey('invalid_arg', $meta_keys['registered_key1']); }
/** * Retrieves registered metadata for a specified object. * * @since 4.6.0 * * @param string $object_type Type of object to request metadata for. (e.g. comment, post, term, user) * @param int $object_id ID of the object the metadata is for. * @param string $meta_key Optional. Registered metadata key. If not specified, retrieve all registered * metadata for the specified object. * @return mixed A single value or array of values for a key if specified. An array of all registered keys * and values for an object ID if not. */ function get_registered_metadata($object_type, $object_id, $meta_key = '') { if (!empty($meta_key)) { if (!registered_meta_key_exists($object_type, $meta_key)) { return false; } $meta_keys = get_registered_meta_keys($object_type); $meta_key_data = $meta_keys[$meta_key]; $data = get_metadata($object_type, $object_id, $meta_key, $meta_key_data['single']); return $data; } $data = get_metadata($object_type, $object_id); $meta_keys = get_registered_meta_keys($object_type); $registered_data = array(); // Someday, array_filter() foreach ($meta_keys as $k => $v) { if (isset($data[$k])) { $registered_data[$k] = $data[$k]; } } return $registered_data; }
/** * Retrieves all the registered meta fields. * * @since 4.7.0 * @access protected * * @return array Registered fields. */ protected function get_registered_fields() { $registered = array(); foreach (get_registered_meta_keys($this->get_meta_type()) as $name => $args) { if (empty($args['show_in_rest'])) { continue; } $rest_args = array(); if (is_array($args['show_in_rest'])) { $rest_args = $args['show_in_rest']; } $default_args = array('name' => $name, 'single' => $args['single'], 'type' => !empty($args['type']) ? $args['type'] : null, 'schema' => array(), 'prepare_callback' => array($this, 'prepare_value')); $default_schema = array('type' => $default_args['type'], 'description' => empty($args['description']) ? '' : $args['description'], 'default' => isset($args['default']) ? $args['default'] : null); $rest_args = array_merge($default_args, $rest_args); $rest_args['schema'] = array_merge($default_schema, $rest_args['schema']); $type = !empty($rest_args['type']) ? $rest_args['type'] : null; $type = !empty($rest_args['schema']['type']) ? $rest_args['schema']['type'] : $type; if (!in_array($type, array('string', 'boolean', 'integer', 'number'))) { continue; } if (empty($rest_args['single'])) { $rest_args['schema']['items'] = array('type' => $rest_args['type']); $rest_args['schema']['type'] = 'array'; } $registered[$rest_args['name']] = $rest_args; } return $registered; }
/** * Retrieves all the registered meta fields. * * @since 4.7.0 * @access protected * * @return array Registered fields. */ protected function get_registered_fields() { $registered = array(); foreach (get_registered_meta_keys($this->get_meta_type()) as $name => $args) { if (empty($args['show_in_rest'])) { continue; } $rest_args = array(); if (is_array($args['show_in_rest'])) { $rest_args = $args['show_in_rest']; } $default_args = array('name' => $name, 'single' => $args['single'], 'schema' => array(), 'prepare_callback' => array($this, 'prepare_value')); $default_schema = array('type' => null, 'description' => empty($args['description']) ? '' : $args['description'], 'default' => isset($args['default']) ? $args['default'] : null); $rest_args = array_merge($default_args, $rest_args); $rest_args['schema'] = array_merge($default_schema, $rest_args['schema']); if (empty($rest_args['schema']['type'])) { // Skip over meta fields that don't have a defined type. if (empty($args['type'])) { continue; } if ($rest_args['single']) { $rest_args['schema']['type'] = $args['type']; } else { $rest_args['schema']['type'] = 'array'; $rest_args['schema']['items'] = array('type' => $args['type']); } } $registered[$rest_args['name']] = $rest_args; } return $registered; }