Esempio n. 1
0
/**
 * 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;
 }