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;
}