filter_default_metadata

The timeline below displays how wordpress function filter_default_metadata has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 5.8

/**
 * Filters into default_{$object_type}_metadata and adds in default value.
 *
 * @since 5.5.0
 *
 * @param mixed  $value     Current value passed to filter.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Metadata key.
 * @param bool   $single    If true, return only the first value of the specified `$meta_key`.
 *                          This parameter has no effect if `$meta_key` is not specified.
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @return mixed An array of default values if `$single` is false.
 *               The default value of the meta field if `$single` is true.
 */
function filter_default_metadata($value, $object_id, $meta_key, $single, $meta_type)
{
    global $wp_meta_keys;
    if (wp_installing()) {
        return $value;
    }
    if (!is_array($wp_meta_keys) || !isset($wp_meta_keys[$meta_type])) {
        return $value;
    }
    $defaults = array();
    foreach ($wp_meta_keys[$meta_type] as $sub_type => $meta_data) {
        foreach ($meta_data as $_meta_key => $args) {
            if ($_meta_key === $meta_key && array_key_exists('default', $args)) {
                $defaults[$sub_type] = $args;
            }
        }
    }
    if (!$defaults) {
        return $value;
    }
    // If this meta type does not have subtypes, then the default is keyed as an empty string.
    if (isset($defaults[''])) {
        $metadata = $defaults[''];
    } else {
        $sub_type = get_object_subtype($meta_type, $object_id);
        if (!isset($defaults[$sub_type])) {
            return $value;
        }
        $metadata = $defaults[$sub_type];
    }
    if ($single) {
        $value = $metadata['default'];
    } else {
        $value = array($metadata['default']);
    }
    return $value;
}

WordPress Version: 5.5

/**
 * Filters into default_{$object_type}_metadata and adds in default value.
 *
 * @since 5.5.0
 *
 * @param mixed  $value     Current value passed to filter.
 * @param int    $object_id ID of the object metadata is for.
 * @param string $meta_key  Metadata key.
 * @param bool   $single    If true, return only the first value of the specified meta_key.
 *                          This parameter has no effect if meta_key is not specified.
 * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
 *                          or any other object type with an associated meta table.
 * @return mixed Single metadata default, or array of defaults.
 */
function filter_default_metadata($value, $object_id, $meta_key, $single, $meta_type)
{
    global $wp_meta_keys;
    if (wp_installing()) {
        return $value;
    }
    if (!is_array($wp_meta_keys) || !isset($wp_meta_keys[$meta_type])) {
        return $value;
    }
    $defaults = array();
    foreach ($wp_meta_keys[$meta_type] as $sub_type => $meta_data) {
        foreach ($meta_data as $_meta_key => $args) {
            if ($_meta_key === $meta_key && array_key_exists('default', $args)) {
                $defaults[$sub_type] = $args;
            }
        }
    }
    if (!$defaults) {
        return $value;
    }
    // If this meta type does not have subtypes, then the default is keyed as an empty string.
    if (isset($defaults[''])) {
        $metadata = $defaults[''];
    } else {
        $sub_type = get_object_subtype($meta_type, $object_id);
        if (!isset($defaults[$sub_type])) {
            return $value;
        }
        $metadata = $defaults[$sub_type];
    }
    if ($single) {
        $value = $metadata['default'];
    } else {
        $value = array($metadata['default']);
    }
    return $value;
}