WordPress.org

Make WordPress Core

Ticket #43941: 43941.diff

File 43941.diff, 5.2 KB (added by spacedmonkey, 15 months ago)
  • src/wp-includes/meta.php

     
    532532                        return array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] );
    533533                }
    534534        }
    535 
    536         if ( $single ) {
    537                 return '';
    538         } else {
    539                 return array();
     535        $object_subtype = get_object_subtype( $meta_type, $object_id );
     536        $default        = get_metadata_default( $meta_type, $meta_key, $object_subtype );
     537        if ( ! $single ) {
     538                $default_value = (array) $default_value;
    540539        }
     540        return $default;
    541541}
    542542
    543543/**
     
    10451045 *                                     Valid values are 'string', 'boolean', 'integer', and 'number'.
    10461046 *     @type string $description       A description of the data attached to this meta key.
    10471047 *     @type bool   $single            Whether the meta key has one value per object, or an array of values per object.
     1048 *     @type mixed  $default           Optional. Default value to return if the meta key does not exist.
    10481049 *     @type string $sanitize_callback A function or method to call when sanitizing `$meta_key` data.
    10491050 *     @type string $auth_callback     Optional. A function or method to call when performing edit_post_meta, add_post_meta, and delete_post_meta capability checks.
    10501051 *     @type bool   $show_in_rest      Whether data associated with this meta key can be considered public.
     
    10701071                'sanitize_callback' => null,
    10711072                'auth_callback'     => null,
    10721073                'show_in_rest'      => false,
     1074                'default'           => null,
    10731075        );
    10741076
    10751077        // There used to be individual args for sanitize and auth callbacks
     
    11321134                }
    11331135        }
    11341136
     1137        if ( null !== $args['default'] ) {
     1138                if ( ! empty( $object_subtype ) ) {
     1139                        add_filter( "default_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", 'filter_default_meta', 10, 4 );
     1140                } else {
     1141                        add_filter( "default_{$object_type}_meta_{$meta_key}", 'filter_default_meta', 10, 4 );
     1142                }
     1143        }
     1144
    11351145        // Global registry only contains meta keys registered with the array of arguments added in 4.6.0.
    11361146        if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) {
    11371147                unset( $args['object_subtype'] );
     
    11451155}
    11461156
    11471157/**
     1158 * Sanitize meta value.
     1159 *
     1160 * @since 3.1.3
     1161 * @since 5.0.0 The `$object_subtype` parameter was added.
     1162 *
     1163 * @param string $meta_key       Meta key.
     1164 * @param mixed  $meta_value     Meta value to sanitize.
     1165 * @param string $object_type    Type of object the meta is registered to.
     1166 *
     1167 * @return mixed Default Value $default_value.
     1168 */
     1169function get_metadata_default( $meta_key, $object_type, $object_subtype = '' ) {
     1170
     1171        $default_value = '';
     1172        if ( ! empty( $object_subtype ) && has_filter( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
     1173
     1174                /**
     1175                 *
     1176                 * The dynamic portions of the hook name, `$object_type`, `$meta_key`,
     1177                 * and `$object_subtype`, refer to the metadata object type (comment, post, term or user),
     1178                 * the meta key value, and the object subtype respectively.
     1179                 *
     1180                 * @since 5.0.0
     1181                 *
     1182                 * @param mixed  $default_value  Default value.
     1183                 * @param string $meta_key       Meta key.
     1184                 * @param string $object_type    Object type.
     1185                 * @param string $object_subtype Object subtype.
     1186                 */
     1187                return apply_filters( "default_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $default_value, $meta_key, $object_type, $object_subtype );
     1188        }
     1189
     1190        /**
     1191         *
     1192         * The dynamic portions of the hook name, `$meta_type`, and `$meta_key`,
     1193         * refer to the metadata object type (comment, post, or user) and the meta
     1194         * key value, respectively.
     1195         *
     1196         * @since 5.5.0
     1197         *
     1198         * @param mixed  $default_value      Default value.
     1199         * @param string $meta_key        Meta key.
     1200         * @param string $object_type     Object type.
     1201         * @param string $object_subtype Object subtype.
     1202         */
     1203        return apply_filters( "default_{$object_type}_meta_{$meta_key}", $default_value, $meta_key, $object_type );
     1204}
     1205
     1206/**
    11481207 * Checks if a meta key is registered.
    11491208 *
    11501209 * @since 4.6.0
     
    11991258                }
    12001259        }
    12011260
     1261        if ( isset( $args['default'] ) && null !== $args['default'] ) {
     1262                if ( ! empty( $object_subtype ) ) {
     1263                        remove_filter( "default_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", 'filter_default_meta' );
     1264                } else {
     1265                        remove_filter( "default_{$object_type}_meta_{$meta_key}", 'filter_default_meta' );
     1266                }
     1267        }
     1268
    12021269        unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );
    12031270
    12041271        // Do some clean up
     
    13601427         */
    13611428        return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id );
    13621429}
     1430
     1431/**
     1432 * @param $default_value
     1433 * @param $meta_key
     1434 * @param $object_type
     1435 * @param string $object_subtype
     1436 *
     1437 * @return mixed
     1438 */
     1439function filter_default_meta( $default_value, $meta_key, $object_type, $object_subtype = '' ) {
     1440        global $wp_meta_keys;
     1441
     1442        if ( ! is_array( $wp_meta_keys ) ) {
     1443                $wp_meta_keys = [];
     1444        }
     1445
     1446
     1447        if ( isset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ]['default'] ) &&
     1448             null !== $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ]['default'] ) {
     1449                $default_value = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ]['default'];
     1450        }
     1451
     1452        return $default_value;
     1453}
     1454 No newline at end of file