Пример #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;
}
/**
 * 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;
}