Make WordPress Core

Ticket #35658: 35658.50.diff

File 35658.50.diff, 31.8 KB (added by ocean90, 8 years ago)
  • src/wp-includes/functions.php

     
    53585358}
    53595359
    53605360/**
    5361  * Check if an object type exists. By default, these are `post`, `comment`, `user`, and `term`.
    5362  *
    5363  * @since 4.6.0
    5364  *
    5365  * @param  string $object_type Object type to check.
    5366  * @return bool                True if the object type exists, false if not.
    5367  */
    5368 function wp_object_type_exists( $object_type ) {
    5369         /**
    5370          * Filters WordPress object types.
    5371          *
    5372          * @since 4.6.0
    5373          *
    5374          * @param array  $types Array of object types.
    5375          */
    5376         $types = apply_filters( 'wp_object_types', array( 'post', 'comment', 'user', 'term' ) );
    5377 
    5378         if ( in_array( $object_type, $types ) ) {
    5379                 return true;
    5380         }
    5381 
    5382         return false;
    5383 }
    5384 
    5385 /**
    53865361 * Attempts to raise the PHP memory limit for memory intensive processes.
    53875362 *
    53885363 * Only allows raising the existing limit and prevents lowering it.
  • src/wp-includes/meta.php

     
    936936 * Sanitize meta value.
    937937 *
    938938 * @since 3.1.3
    939  * @since 4.6.0 Added the `$object_subtype` parameter.
    940939 *
    941940 * @param string $meta_key       Meta key.
    942941 * @param mixed  $meta_value     Meta value to sanitize.
    943942 * @param string $object_type    Type of object the meta is registered to.
    944  * @param string $object_subtype Optional. Subtype of object. Will inherit the object type by default.
    945943 *
    946944 * @return mixed Sanitized $meta_value.
    947945 */
    948 function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype = '' ) {
    949         if ( ! empty( $object_subtype ) ) {
    950                 /**
    951                  * Filters the sanitization of a specific meta key of a specific meta type and subtype.
    952                  *
    953                  * The dynamic portions of the hook name, `$meta_type`, `$meta_subtype`,
    954                  * and `$meta_key`, refer to the metadata object type (comment, post, or user)
    955                  * the object subtype, and the meta key value, respectively.
    956                  *
    957                  * @since 4.6.0
    958                  *
    959                  * @param mixed  $meta_value      Meta value to sanitize.
    960                  * @param string $meta_key        Meta key.
    961                  * @param string $object_type     Object type.
    962                  * @param string $object_subtype  Object subtype.
    963                  */
    964                 $meta_value = apply_filters( "sanitize_{$object_type}_{$object_subtype}_meta_{$meta_key}", $meta_value, $meta_key, $object_type, $object_subtype );
    965         }
    966 
     946function sanitize_meta( $meta_key, $meta_value, $object_type ) {
    967947        /**
    968948         * Filters the sanitization of a specific meta key of a specific meta type.
    969949         *
     
    972952         * key value, respectively.
    973953         *
    974954         * @since 3.3.0
    975          * @since 4.6.0 Added the `$object_subtype` parameter.
    976955         *
    977956         * @param mixed  $meta_value      Meta value to sanitize.
    978957         * @param string $meta_key        Meta key.
    979958         * @param string $object_type     Object type.
    980          * @param string $object_subtype  Object subtype.
    981959         */
    982         return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}", $meta_value, $meta_key, $object_type, $object_subtype );
     960        return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}", $meta_value, $meta_key, $object_type );
    983961}
    984962
    985963/**
     
    995973 * @param array  $args {
    996974 *     Data used to describe the meta key when registered.
    997975 *
    998  *     @type string $object_subtype    A subtype; e.g. if the object type is "post", the post type.
    999976 *     @type string $type              The type of data associated with this meta key.
    1000977 *     @type string $description       A description of the data attached to this meta key.
    1001978 *     @type bool   $single            Whether the meta key has one value per object, or an array of values per object.
     
    1005982 * }
    1006983 * @param string|array $deprecated Deprecated. Use `$args` instead.
    1007984 *
    1008  * @return bool|WP_error True if the meta key was successfully registered in the global array, WP_Error if not.
     985 * @return bool True if the meta key was successfully registered in the global array, false if not.
    1009986 *                       Registering a meta key with distinct sanitize and auth callbacks will fire those
    1010  *                       callbacks, but will not add to the global registry as it requires a subtype.
     987 *                       callbacks, but will not add to the global registry.
    1011988 */
    1012989function register_meta( $object_type, $meta_key, $args, $deprecated = null ) {
    1013990        global $wp_meta_keys;
     
    1016993                $wp_meta_keys = array();
    1017994        }
    1018995
    1019         if ( ! wp_object_type_exists( $object_type ) ) {
    1020                 return new WP_Error( 'register_meta_failed', __( 'Meta can only be registered against a core object type.' ) );
    1021         }
    1022 
    1023996        $defaults = array(
    1024                 'object_subtype'    => '',
    1025997                'type'              => 'string',
    1026998                'description'       => '',
    1027999                'single'            => false,
     
    10631035         */
    10641036        $args = apply_filters( 'register_meta_args', $args, $defaults, $object_type, $meta_key );
    10651037
    1066         // Object subtype is required if using the args style of registration
    1067         if ( ! $has_old_sanitize_cb && ! $has_old_auth_cb && empty( $args['object_subtype'] ) ) {
    1068                 return new WP_Error( 'register_meta_failed', __( 'Meta must be registered against an object subtype.' ) );
    1069         }
    1070 
    10711038        // If `auth_callback` is not provided, fall back to `is_protected_meta()`.
    10721039        if ( empty( $args['auth_callback'] ) ) {
    10731040                if ( is_protected_meta( $meta_key, $object_type ) ) {
     
    10771044                }
    10781045        }
    10791046
    1080         $object_subtype = '';
    1081 
    1082         if ( ! empty( $args['object_subtype'] ) ) {
    1083                 $object_subtype = $args['object_subtype'];
    1084         }
    1085 
    10861047        // Back-compat: old sanitize and auth callbacks are applied to all of an object type.
    1087         if ( $has_old_sanitize_cb && is_callable( $args['sanitize_callback'] ) ) {
    1088                 add_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'], 10, 4 );
     1048        if ( ! empty( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
     1049                add_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'], 10, 3 );
    10891050        }
    10901051
    1091         if ( $has_old_auth_cb && is_callable( $args['auth_callback'] ) ) {
     1052        if ( ! empty( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
    10921053                add_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'], 10, 6 );
    10931054        }
    10941055
    1095         if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb) {
    1096                 if ( is_callable( $args['sanitize_callback'] ) ) {
    1097                         add_filter( "sanitize_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['sanitize_callback'], 10, 4 );
    1098                 }
     1056        // Global registry only contains meta keys registered with the array of arguments added in 4.6.0.
     1057        if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) {
     1058                $wp_meta_keys[ $object_type ][ $meta_key ] = $args;
    10991059
    1100                 if ( is_callable( $args['auth_callback'] ) ) {
    1101                         add_filter( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['auth_callback'], 10, 6 );
    1102                 }
    1103         }
    1104 
    1105         // Global registry only contains meta keys registered in the new way with a subtype.
    1106         if ( ! empty( $object_subtype ) ) {
    1107                 $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] = $args;
    1108 
    11091060                return true;
    11101061        }
    11111062
    1112         return new WP_Error( 'register_meta_failed', __( 'Sanitize and auth callbacks registered; meta key not registered.' ) );
     1063        return false;
    11131064}
    11141065
    11151066/**
     
    11181069 * @since 4.6.0
    11191070 *
    11201071 * @param string $object_type    The type of object.
    1121  * @param string $object_subtype The subtype of the object type.
    11221072 * @param string $meta_key       The meta key.
    11231073 *
    1124  * @return bool|WP_error True if the meta key is registered to the object type and subtype. False if not.
    1125  *                       WP_Error if an invalid object type is passed.
     1074 * @return bool True if the meta key is registered to the object type. False if not.
    11261075 */
    1127 function registered_meta_key_exists( $object_type, $object_subtype, $meta_key ) {
     1076function registered_meta_key_exists( $object_type, $meta_key ) {
    11281077        global $wp_meta_keys;
    11291078
    11301079        if ( ! is_array( $wp_meta_keys ) ) {
    11311080                return false;
    11321081        }
    11331082
    1134         // Only specific core object types are supported.
    1135         if ( ! wp_object_type_exists( $object_type ) ) {
    1136                 return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key. Not a core object type.' ) );
    1137         }
    1138 
    11391083        if ( ! isset( $wp_meta_keys[ $object_type ] ) ) {
    11401084                return false;
    11411085        }
    11421086
    1143         if ( ! isset( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
    1144                 return false;
    1145         }
    1146 
    1147         if ( isset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] ) ) {
     1087        if ( isset( $wp_meta_keys[ $object_type ][ $meta_key ] ) ) {
    11481088                return true;
    11491089        }
    11501090
     
    11571097 * @since 4.6.0
    11581098 *
    11591099 * @param string $object_type    The type of object.
    1160  * @param string $object_subtype The subtype of the object type.
    11611100 * @param string $meta_key       The meta key.
    11621101 *
    1163  * @return bool|WP_Error True if successful. WP_Error if the meta key is invalid.
     1102 * @return bool True if successful. False if the meta key was not registered.
    11641103 */
    1165 function unregister_meta_key( $object_type, $object_subtype, $meta_key ) {
     1104function unregister_meta_key( $object_type, $meta_key ) {
    11661105        global $wp_meta_keys;
    11671106
    1168         if ( ! registered_meta_key_exists( $object_type, $object_subtype, $meta_key ) ) {
    1169                 return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key' ) );
     1107        if ( ! registered_meta_key_exists( $object_type, $meta_key ) ) {
     1108                return false;
    11701109        }
    11711110
    1172         $args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];
     1111        $args = $wp_meta_keys[ $object_type ][ $meta_key ];
    11731112
    11741113        if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
    1175                 remove_filter( "sanitize_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['sanitize_callback'] );
     1114                remove_filter( "sanitize_{$object_type}_meta_{$meta_key}", $args['sanitize_callback'] );
    11761115        }
    11771116
    11781117        if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
    1179                 remove_filter( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['auth_callback'] );
     1118                remove_filter( "auth_{$object_type}_meta_{$meta_key}", $args['auth_callback'] );
    11801119        }
    11811120
    1182         unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );
     1121        unset( $wp_meta_keys[ $object_type ][ $meta_key ] );
    11831122
    11841123        // Do some clean up
    1185         if ( empty( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
    1186                 unset( $wp_meta_keys[ $object_type ][ $object_subtype ] );
    1187         }
    1188 
    11891124        if ( empty( $wp_meta_keys[ $object_type ] ) ) {
    11901125                unset( $wp_meta_keys[ $object_type ] );
    11911126        }
     
    11941129}
    11951130
    11961131/**
    1197  * Retrieves a list of registered meta keys for an object type and optionally subtype.
     1132 * Retrieves a list of registered meta keys for an object type.
    11981133 *
    11991134 * @since 4.6.0
    12001135 *
    1201  * @param string $object_type    The type of object. Post, comment, user, term.
    1202  * @param string $object_subtype Optional. A subtype of the object (e.g. custom post type).
     1136 * @param string $object_type The type of object. Post, comment, user, term.
    12031137 *
    12041138 * @return array List of registered meta keys.
    12051139 */
    1206 function get_registered_meta_keys( $object_type, $object_subtype = '' ) {
     1140function get_registered_meta_keys( $object_type ) {
    12071141        global $wp_meta_keys;
    12081142
    12091143        if ( ! isset( $wp_meta_keys[ $object_type ] ) ) {
    12101144                return array();
    12111145        }
    12121146
    1213         if ( empty( $object_subtype ) && isset( $wp_meta_keys[ $object_type ] ) ) {
    1214                 return $wp_meta_keys[ $object_type ];
    1215         }
    1216 
    1217         if ( ! isset( $wp_meta_keys[ $object_type ][ $object_subtype ] ) ) {
    1218                 return array();
    1219         }
    1220 
    1221         return $wp_meta_keys[ $object_type ][ $object_subtype ];
     1147        return $wp_meta_keys[ $object_type ];
    12221148}
    12231149
    12241150/**
     
    12261152 *
    12271153 * @since 4.6.0
    12281154 *
    1229  * @param string $object_type    Type of object to request metadata for. (e.g. comment, post, term, user)
    1230  * @param string $object_subtype The subtype of the object's type to request metadata for. (e.g. custom post type)
    1231  * @param int    $object_id      ID of the object the metadata is for.
    1232  * @param string $meta_key       Optional. Registered metadata key. If not specified, retrieve all registered
    1233  *                               metadata for the specified object.
     1155 * @param string $object_type Type of object to request metadata for. (e.g. comment, post, term, user)
     1156 * @param int    $object_id   ID of the object the metadata is for.
     1157 * @param string $meta_key    Optional. Registered metadata key. If not specified, retrieve all registered
     1158 *                            metadata for the specified object.
    12341159 *
    1235  * @return mixed|WP_Error
     1160 * @return mixed A single value or array of values for a key if specified. An array of all registered keys
     1161 *               and values for an object ID if not.
    12361162 */
    1237 function get_registered_metadata( $object_type, $object_subtype, $object_id, $meta_key = '' ) {
    1238         global $wp_meta_keys;
    1239 
    1240         if ( ! is_array( $wp_meta_keys ) ) {
    1241                 return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key. Not registered.' ) );
    1242         }
    1243 
    1244         if ( ! wp_object_type_exists( $object_type ) ) {
    1245                 return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key. Not a core object type.' ) );
    1246         }
    1247 
     1163function get_registered_metadata( $object_type, $object_id, $meta_key = '' ) {
    12481164        if ( ! empty( $meta_key ) ) {
    1249                 if ( ! registered_meta_key_exists( $object_type, $object_subtype, $meta_key ) ) {
    1250                         return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key. Not registered.' ) );
     1165                if ( ! registered_meta_key_exists( $object_type, $meta_key ) ) {
     1166                        return false;
    12511167                }
    1252                 $meta_keys = get_registered_meta_keys( $object_type, $object_subtype );
     1168                $meta_keys = get_registered_meta_keys( $object_type );
    12531169                $meta_key_data = $meta_keys[ $meta_key ];
    12541170
    12551171                $data = get_metadata( $object_type, $object_id, $meta_key, $meta_key_data['single'] );
     
    12591175
    12601176        $data = get_metadata( $object_type, $object_id );
    12611177
    1262         $meta_keys = get_registered_meta_keys( $object_type, $object_subtype );
     1178        $meta_keys = get_registered_meta_keys( $object_type );
    12631179        $registered_data = array();
    12641180
    12651181        // Someday, array_filter()
  • tests/phpunit/tests/meta/registerMeta.php

     
    33 * @group meta
    44 */
    55class Tests_Meta_Register_Meta extends WP_UnitTestCase {
    6         protected static $editor_id;
    76        protected static $post_id;
    8         protected static $comment_id;
    97
    108        public static function wpSetUpBeforeClass( $factory ) {
    11                 self::$editor_id = $factory->user->create( array( 'role' => 'editor' ) );
    129                self::$post_id = $factory->post->create();
    13                 self::$comment_id = $factory->comment->create( array( 'comment_post_ID' => self::$post_id ) );
    1410        }
    1511
    1612        public static function wpTearDownAfterClass() {
    17                 self::delete_user( self::$editor_id );
    18                 wp_delete_comment( self::$comment_id, true );
    1913                wp_delete_post( self::$post_id, true );
    2014        }
    2115
    22         function setUp() {
    23                 parent::setUp();
    24                 wp_set_current_user( self::$editor_id );
    25         }
    26 
    2716        public function _old_sanitize_meta_cb( $meta_value, $meta_key, $meta_type ) {
    2817                return $meta_key . ' old sanitized';
    2918        }
    3019
    31         public function _new_sanitize_meta_cb( $meta_value, $meta_key, $object_type, $object_subtype ) {
     20        public function _new_sanitize_meta_cb( $meta_value, $meta_key, $object_type ) {
    3221                return $meta_key . ' new sanitized';
    3322        }
    3423
     
    6857                $this->assertEquals( array( 'auth' => 10, 'sanitize' => 10 ), $has_filters );
    6958        }
    7059
    71         public function test_register_meta_with_valid_object_type_and_object_subtype_returns_true() {
    72                 $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
    73                 unregister_meta_key( 'post', 'post', 'flight_number' );
     60        public function test_register_meta_with_post_object_type_returns_true() {
     61                $result = register_meta( 'post', 'flight_number', array() );
     62                unregister_meta_key( 'post', 'flight_number' );
    7463
    7564                $this->assertTrue( $result );
    7665        }
    7766
    78         public function test_register_meta_with_post_object_type_and_subtype_populates_wp_meta_keys() {
     67        public function test_register_meta_with_post_object_type_populates_wp_meta_keys() {
    7968                global $wp_meta_keys;
    8069
    81                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     70                register_meta( 'post', 'flight_number', array() );
    8271                $actual = $wp_meta_keys;
    83                 unregister_meta_key( 'post', 'post', 'flight_number' );
     72                unregister_meta_key( 'post', 'flight_number' );
    8473
    8574                $expected = array(
    8675                        'post' => array(
    87                                 'post' => array(
    88                                         'flight_number' => array(
    89                                                 'object_subtype' => 'post',
    90                                                 'type' => 'string',
    91                                                 'description' => '',
    92                                                 'single' => false,
    93                                                 'sanitize_callback' => null,
    94                                                 'auth_callback' => '__return_true',
    95                                                 'show_in_rest' => false,
    96                                         ),
     76                                'flight_number' => array(
     77                                        'type' => 'string',
     78                                        'description' => '',
     79                                        'single' => false,
     80                                        'sanitize_callback' => null,
     81                                        'auth_callback' => '__return_true',
     82                                        'show_in_rest' => false,
    9783                                ),
    9884                        ),
    9985                );
     
    10187                $this->assertEquals( $actual, $expected );
    10288        }
    10389
    104         public function test_register_meta_with_post_object_type_and_unregistered_subtype_populates_wp_meta_keys() {
     90        public function test_register_meta_with_term_object_type_populates_wp_meta_keys() {
    10591                global $wp_meta_keys;
    106 
    107                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'not_a_post_type' ) );
     92                register_meta( 'term', 'category_icon', array() );
    10893                $actual = $wp_meta_keys;
    109                 unregister_meta_key( 'post', 'not_a_post_type', 'flight_number' );
     94                unregister_meta_key( 'term', 'category_icon' );
    11095
    11196                $expected = array(
    112                         'post' => array(
    113                                 'not_a_post_type' => array(
    114                                         'flight_number' => array(
    115                                                 'object_subtype' => 'not_a_post_type',
    116                                                 'type' => 'string',
    117                                                 'description' => '',
    118                                                 'single' => false,
    119                                                 'sanitize_callback' => null,
    120                                                 'auth_callback' => '__return_true',
    121                                                 'show_in_rest' => false,
    122                                         ),
    123                                 ),
    124                         ),
    125                 );
    126 
    127                 $this->assertEquals( $actual, $expected );
    128         }
    129 
    130         public function test_register_meta_with_term_object_type_and_category_subtype_populates_wp_meta_keys() {
    131                 global $wp_meta_keys;
    132                 register_meta( 'term', 'category_icon', array( 'object_subtype' => 'category' ) );
    133                 $actual = $wp_meta_keys;
    134                 unregister_meta_key( 'term', 'category', 'category_icon' );
    135 
    136                 $expected = array(
    13797                        'term' => array(
    138                                 'category' => array(
    139                                         'category_icon' => array(
    140                                                 'object_subtype' => 'category',
    141                                                 'type' => 'string',
    142                                                 'description' => '',
    143                                                 'single' => false,
    144                                                 'sanitize_callback' => null,
    145                                                 'auth_callback' => '__return_true',
    146                                                 'show_in_rest' => false,
    147                                         ),
     98                                'category_icon' => array(
     99                                        'type' => 'string',
     100                                        'description' => '',
     101                                        'single' => false,
     102                                        'sanitize_callback' => null,
     103                                        'auth_callback' => '__return_true',
     104                                        'show_in_rest' => false,
    148105                                ),
    149106                        ),
    150107                );
     
    152109                $this->assertEquals( $actual, $expected );
    153110        }
    154111
    155         public function test_register_meta_with_comment_object_type_and_subtype_populates_wp_meta_keys() {
    156                 global $wp_meta_keys;
    157                 register_meta( 'comment', 'comment_rating', array( 'object_subtype' => 'comment' ) );
    158                 $actual = $wp_meta_keys;
    159                 unregister_meta_key( 'comment', 'comment', 'comment_rating' );
    160 
    161                 $expected = array(
    162                         'comment' => array(
    163                                 'comment' => array(
    164                                         'comment_rating' => array(
    165                                                 'object_subtype' => 'comment',
    166                                                 'type' => 'string',
    167                                                 'description' => '',
    168                                                 'single' => false,
    169                                                 'sanitize_callback' => null,
    170                                                 'auth_callback' => '__return_true',
    171                                                 'show_in_rest' => false,
    172                                         ),
    173                                 ),
    174                         ),
    175                 );
    176 
    177                 $this->assertEquals( $actual, $expected );
    178         }
    179 
    180112        public function test_register_meta_with_deprecated_sanitize_callback_does_not_populate_wp_meta_keys() {
    181113                global $wp_meta_keys;
    182114
     
    188120                $this->assertEquals( array(), $actual );
    189121        }
    190122
    191         public function test_register_meta_with_deprecated_sanitize_callback_param_returns_wp_error() {
     123        public function test_register_meta_with_deprecated_sanitize_callback_param_returns_false() {
    192124                $actual = register_meta( 'post', 'flight_number', array( $this, '_old_sanitize_meta_cb' ) );
    193125
    194126                remove_filter( 'sanitize_post_meta_flight_number', array( $this, '_old_sanitize_meta_cb') );
    195127                remove_filter( 'auth_post_meta_flight_number', '__return_true');
    196128
    197                 $this->assertWPError( $actual );
    198                 $this->assertEquals( 'register_meta_failed', $actual->get_error_code() );
     129                $this->assertFalse( $actual );
    199130        }
    200131
    201132        public function test_register_meta_with_deprecated_sanitize_callback_parameter_passes_through_filter() {
     
    210141
    211142        public function test_register_meta_with_current_sanitize_callback_populates_wp_meta_keys() {
    212143                global $wp_meta_keys;
    213                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     144                register_meta( 'post', 'flight_number', array( 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
    214145                $actual = $wp_meta_keys;
    215                 unregister_meta_key( 'post', 'post', 'flight_number' );
     146                unregister_meta_key( 'post', 'flight_number' );
    216147
    217148                $expected = array(
    218149                        'post' => array(
    219                                 'post' => array(
    220                                         'flight_number' => array(
    221                                                 'object_subtype' => 'post',
    222                                                 'type' => 'string',
    223                                                 'description' => '',
    224                                                 'single' => false,
    225                                                 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ),
    226                                                 'auth_callback' => '__return_true',
    227                                                 'show_in_rest' => false,
    228                                         ),
     150                                'flight_number' => array(
     151                                        'type' => 'string',
     152                                        'description' => '',
     153                                        'single' => false,
     154                                        'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ),
     155                                        'auth_callback' => '__return_true',
     156                                        'show_in_rest' => false,
    229157                                ),
    230158                        ),
    231159                );
     
    233161        }
    234162
    235163        public function test_register_meta_with_current_sanitize_callback_returns_true() {
    236                 $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
    237                 unregister_meta_key( 'post', 'post', 'flight_number' );
     164                $result = register_meta( 'post', 'flight_number', array( 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     165                unregister_meta_key( 'post', 'flight_number' );
    238166
    239167                $this->assertTrue( $result );
    240168        }
    241169
    242170        public function test_register_meta_with_new_sanitize_callback_parameter() {
    243                 register_meta( 'post', 'new_sanitized_key', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
    244                 $meta = sanitize_meta( 'new_sanitized_key', 'unsanitized', 'post', 'post' );
     171                register_meta( 'post', 'new_sanitized_key', array( 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     172                $meta = sanitize_meta( 'new_sanitized_key', 'unsanitized', 'post' );
    245173
    246                 unregister_meta_key( 'post', 'post', 'new_sanitized_key' );
     174                unregister_meta_key( 'post', 'new_sanitized_key' );
    247175
    248176                $this->assertEquals( 'new_sanitized_key new sanitized', $meta );
    249177        }
    250178
    251179        public function test_register_meta_unregistered_meta_key_removes_sanitize_filter() {
    252                 register_meta( 'post', 'new_sanitized_key', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
    253                 unregister_meta_key( 'post', 'post', 'new_sanitized_key' );
     180                register_meta( 'post', 'new_sanitized_key', array( 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     181                unregister_meta_key( 'post', 'new_sanitized_key' );
    254182
    255                 $has_filter = has_filter( 'sanitize_post_post_meta_new_sanitized_key', array( $this, '_new_sanitize_meta_cb' ) );
     183                $has_filter = has_filter( 'sanitize_post_meta_new_sanitized_key', array( $this, '_new_sanitize_meta_cb' ) );
    256184
    257185                $this->assertFalse( $has_filter );
    258186        }
    259187
    260188        public function test_register_meta_unregistered_meta_key_removes_auth_filter() {
    261                 register_meta( 'post', 'new_auth_key', array( 'object_subtype' => 'post', 'auth_callback' => array( $this, '_new_auth_meta_cb' ) ) );
    262                 unregister_meta_key( 'post', 'post', 'new_auth_key' );
     189                register_meta( 'post', 'new_auth_key', array( 'auth_callback' => array( $this, '_new_auth_meta_cb' ) ) );
     190                unregister_meta_key( 'post', 'new_auth_key' );
    263191
    264                 $has_filter = has_filter( 'auth_post_post_meta_new_auth_key', array( $this, '_new_auth_meta_cb' ) );
     192                $has_filter = has_filter( 'auth_post_meta_new_auth_key', array( $this, '_new_auth_meta_cb' ) );
    265193
    266194                $this->assertFalse( $has_filter );
    267195        }
    268196
    269197        public function test_unregister_meta_key_clears_key_from_wp_meta_keys() {
    270198                global $wp_meta_keys;
    271                 register_meta( 'post', 'registered_key', array( 'object_subtype' => 'post' ) );
    272                 unregister_meta_key( 'post', 'post', 'registered_key' );
     199                register_meta( 'post', 'registered_key', array() );
     200                unregister_meta_key( 'post', 'registered_key' );
    273201
    274202                $this->assertEquals( array(), $wp_meta_keys );
    275203        }
    276204
    277         public function test_unregister_meta_key_with_invalid_key_returns_wp_error() {
    278                 $this->assertWPError( unregister_meta_key( 'post', 'post', 'not_a_registered_key' ) );
     205        public function test_unregister_meta_key_with_invalid_key_returns_false() {
     206                $this->assertFalse( unregister_meta_key( 'post', 'not_a_registered_key' ) );
    279207        }
    280208
    281209        public function test_get_registered_meta_keys() {
    282                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
    283                 register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
     210                register_meta( 'post', 'registered_key1', array() );
     211                register_meta( 'post', 'registered_key2', array() );
    284212
    285                 $meta_keys = get_registered_meta_keys( 'post', 'post' );
     213                $meta_keys = get_registered_meta_keys( 'post' );
    286214
    287                 unregister_meta_key( 'post', 'post', 'registered_key1' );
    288                 unregister_meta_key( 'post', 'post', 'registered_key2' );
     215                unregister_meta_key( 'post', 'registered_key1' );
     216                unregister_meta_key( 'post', 'registered_key2' );
    289217
    290218                $this->assertArrayHasKey( 'registered_key1', $meta_keys );
    291219                $this->assertArrayHasKey( 'registered_key2', $meta_keys );
    292220        }
    293221
    294         public function test_get_registered_meta_keys_with_subtype_without_registered_keys_is_empty() {
    295                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
    296                 register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
    297 
    298                 $meta_keys = get_registered_meta_keys( 'post', 'page' );
    299 
    300                 unregister_meta_key( 'post', 'post', 'registered_key1' );
    301                 unregister_meta_key( 'post', 'post', 'registered_key2' );
    302 
    303                 $this->assertEmpty( $meta_keys );
    304         }
    305 
    306222        public function test_get_registered_meta_keys_with_invalid_type_is_empty() {
    307                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
    308                 register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'post' ) );
     223                register_meta( 'post', 'registered_key1', array() );
     224                register_meta( 'post', 'registered_key2', array() );
    309225
    310226                $meta_keys = get_registered_meta_keys( 'invalid-type' );
    311227
    312                 unregister_meta_key( 'post', 'post', 'registered_key1' );
    313                 unregister_meta_key( 'post', 'post', 'registered_key2' );
     228                unregister_meta_key( 'post', 'registered_key1' );
     229                unregister_meta_key( 'post', 'registered_key2' );
    314230
    315231                $this->assertEmpty( $meta_keys );
    316232        }
    317233
    318         public function test_get_registered_meta_keys_has_count() {
    319                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post' ) );
    320                 register_meta( 'post', 'registered_key2', array( 'object_subtype' => 'page' ) );
     234        public function test_get_registered_meta_keys_description_arg() {
     235                register_meta( 'post', 'registered_key1', array( 'description' => 'I\'m just a field, take a good look at me' ) );
    321236
    322237                $meta_keys = get_registered_meta_keys( 'post' );
    323238
    324                 unregister_meta_key( 'post', 'post', 'registered_key1' );
    325                 unregister_meta_key( 'post', 'page', 'registered_key2' );
     239                unregister_meta_key( 'post', 'registered_key1' );
    326240
    327                 $this->assertCount( 2, $meta_keys );
    328         }
    329 
    330         public function test_get_registered_meta_keys_description_arg() {
    331                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post', 'description' => 'I\'m just a field, take a good look at me' ) );
    332 
    333                 $meta_keys = get_registered_meta_keys( 'post', 'post' );
    334 
    335                 unregister_meta_key( 'post', 'post', 'registered_key1' );
    336 
    337241                $this->assertEquals( 'I\'m just a field, take a good look at me', $meta_keys['registered_key1']['description'] );
    338242        }
    339243
    340244        public function test_get_registered_meta_keys_invalid_arg() {
    341                 register_meta( 'post', 'registered_key1', array( 'object_subtype' => 'post', 'invalid_arg' => 'invalid' ) );
     245                register_meta( 'post', 'registered_key1', array( 'invalid_arg' => 'invalid' ) );
    342246
    343                 $meta_keys = get_registered_meta_keys( 'post', 'post' );
     247                $meta_keys = get_registered_meta_keys( 'post' );
    344248
    345                 unregister_meta_key( 'post', 'post', 'registered_key1' );
     249                unregister_meta_key( 'post', 'registered_key1' );
    346250
    347251                $this->assertArrayNotHasKey( 'invalid_arg', $meta_keys['registered_key1'] );
    348252        }
    349253
    350254        public function test_get_registered_metadata() {
    351                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     255                register_meta( 'post', 'flight_number', array() );
    352256                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
    353257
    354                 $meta = get_registered_metadata( 'post', 'post', self::$post_id );
     258                $meta = get_registered_metadata( 'post', self::$post_id );
    355259
    356                 unregister_meta_key( 'post', 'post', 'flight_number' );
     260                unregister_meta_key( 'post', 'flight_number' );
    357261
    358262                $this->assertEquals( 'Oceanic 815', $meta['flight_number'][0] );
    359263        }
    360264
    361265        public function test_get_registered_metadata_by_key() {
    362                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     266                register_meta( 'post', 'flight_number', array() );
    363267                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
    364268
    365                 $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_number' );
     269                $meta = get_registered_metadata( 'post', self::$post_id, 'flight_number' );
    366270
    367                 unregister_meta_key( 'post', 'post', 'flight_number' );
     271                unregister_meta_key( 'post', 'flight_number' );
    368272
    369273                $this->assertEquals( 'Oceanic 815', $meta[0] );
    370274        }
    371275
    372276        public function test_get_registered_metadata_by_key_single() {
    373                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'single' => true ) );
     277                register_meta( 'post', 'flight_number', array( 'single' => true ) );
    374278                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
    375279
    376                 $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_number' );
     280                $meta = get_registered_metadata( 'post', self::$post_id, 'flight_number' );
    377281
    378                 unregister_meta_key( 'post', 'post', 'flight_number' );
     282                unregister_meta_key( 'post', 'flight_number' );
    379283
    380284                $this->assertEquals( 'Oceanic 815', $meta );
    381285        }
    382286
    383287        public function test_get_registered_metadata_by_invalid_key() {
    384                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
     288                register_meta( 'post', 'flight_number', array() );
    385289                add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
    386290
    387                 $meta = get_registered_metadata( 'post', 'post', self::$post_id, 'flight_pilot' );
     291                $meta = get_registered_metadata( 'post', self::$post_id, 'flight_pilot' );
    388292
    389                 unregister_meta_key( 'post', 'post', 'flight_number' );
     293                unregister_meta_key( 'post', 'flight_number' );
    390294
    391                 $this->assertWPError( $meta );
     295                $this->assertFalse( $meta );
    392296        }
    393297
    394         public function test_get_registered_metadata_invalid_object_type() {
    395                 register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
    396                 add_post_meta( self::$post_id, 'flight_number', 'Oceanic 815' );
     298        public function test_get_registered_metadata_invalid_object_type_returns_empty_array() {
     299                $meta = get_registered_metadata( 'invalid-type', self::$post_id );
    397300
    398                 $meta = get_registered_metadata( 'invalid-type', 'invalid-subtype', self::$post_id );
     301                $this->assertEmpty( $meta );
     302        }
    399303
    400                 unregister_meta_key( 'post', 'post', 'flight_number' );
     304        public function test_register_meta_args_filter() {
     305                global $wp_meta_keys;
    401306
    402                 $this->assertWPError( $meta );
    403         }
     307                add_filter( 'register_meta_args', '__return_empty_array' );
    404308
    405         public function test_get_registered_metadata_invalid() {
    406                 $meta = get_registered_metadata( 'invalid-type', 'invalid-subtype', self::$post_id );
     309                register_meta( 'post', 'registered_key', array() );
     310                unregister_meta_key( 'post', 'registered_key' );
    407311
    408                 $this->assertWPError( $meta );
     312                remove_filter( 'register_meta_args', '__return_empty_array' );
     313
     314                $this->assertEquals( array(), $wp_meta_keys );
    409315        }
    410316}