Ticket #43941: 43941.diff
File 43941.diff, 5.2 KB (added by , 7 years ago) |
---|
-
src/wp-includes/meta.php
532 532 return array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] ); 533 533 } 534 534 } 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; 540 539 } 540 return $default; 541 541 } 542 542 543 543 /** … … 1045 1045 * Valid values are 'string', 'boolean', 'integer', and 'number'. 1046 1046 * @type string $description A description of the data attached to this meta key. 1047 1047 * @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. 1048 1049 * @type string $sanitize_callback A function or method to call when sanitizing `$meta_key` data. 1049 1050 * @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. 1050 1051 * @type bool $show_in_rest Whether data associated with this meta key can be considered public. … … 1070 1071 'sanitize_callback' => null, 1071 1072 'auth_callback' => null, 1072 1073 'show_in_rest' => false, 1074 'default' => null, 1073 1075 ); 1074 1076 1075 1077 // There used to be individual args for sanitize and auth callbacks … … 1132 1134 } 1133 1135 } 1134 1136 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 1135 1145 // Global registry only contains meta keys registered with the array of arguments added in 4.6.0. 1136 1146 if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) { 1137 1147 unset( $args['object_subtype'] ); … … 1145 1155 } 1146 1156 1147 1157 /** 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 */ 1169 function 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 /** 1148 1207 * Checks if a meta key is registered. 1149 1208 * 1150 1209 * @since 4.6.0 … … 1199 1258 } 1200 1259 } 1201 1260 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 1202 1269 unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] ); 1203 1270 1204 1271 // Do some clean up … … 1360 1427 */ 1361 1428 return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id ); 1362 1429 } 1430 1431 /** 1432 * @param $default_value 1433 * @param $meta_key 1434 * @param $object_type 1435 * @param string $object_subtype 1436 * 1437 * @return mixed 1438 */ 1439 function 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