Make WordPress Core

Ticket #35658: 35658.36.diff

File 35658.36.diff, 3.3 KB (added by jeremyfelt, 9 years ago)
  • src/wp-includes/meta.php

     
    11611161                return new WP_Error( 'invalid_meta_key', __( 'Invalid meta key' ) );
    11621162        }
    11631163
     1164        $args = $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ];
     1165
     1166        if ( isset( $args['sanitize_callback'] ) && is_callable( $args['sanitize_callback'] ) ) {
     1167                remove_filter( "sanitize_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['sanitize_callback'] );
     1168        }
     1169
     1170        if ( isset( $args['auth_callback'] ) && is_callable( $args['auth_callback'] ) ) {
     1171                remove_filter( "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}", $args['auth_callback'] );
     1172        }
     1173
    11641174        unset( $wp_meta_keys[ $object_type ][ $object_subtype ][ $meta_key ] );
    11651175
    11661176        // Do some clean up
  • tests/phpunit/tests/meta/registerMeta.php

     
    3232                return $meta_key . ' new sanitized';
    3333        }
    3434
     35        public function _new_auth_meta_cb( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
     36                return $allowed;
     37        }
     38
    3539        public function test_register_meta_with_valid_object_type_and_object_subtype_returns_true() {
    3640                $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post' ) );
    3741                unregister_meta_key( 'post', 'post', 'flight_number' );
     
    200204                $result = register_meta( 'post', 'flight_number', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
    201205                unregister_meta_key( 'post', 'post', 'flight_number' );
    202206
    203                 remove_filter( 'sanitize_post_post_meta_flight_number', array( $this, '_new_sanitize_meta_cb') );
    204                 remove_filter( 'auth_post_post_meta_flight_number', '__return_true');
    205 
    206207                $this->assertTrue( $result );
    207208        }
    208209
     
    212213
    213214                unregister_meta_key( 'post', 'post', 'new_sanitized_key' );
    214215
    215                 remove_filter( 'sanitize_post_post_meta_new_sanitized_key', array( $this, '_new_sanitize_meta_cb') );
    216                 remove_filter( 'auth_post_post_meta_new_sanitized_key', '__return_true');
    217 
    218216                $this->assertEquals( 'new_sanitized_key new sanitized', $meta );
    219217        }
    220218
     219        public function test_register_meta_unregistered_meta_key_removes_sanitize_filter() {
     220                register_meta( 'post', 'new_sanitized_key', array( 'object_subtype' => 'post', 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ) ) );
     221                unregister_meta_key( 'post', 'post', 'new_sanitized_key' );
     222
     223                $has_filter = has_filter( 'sanitize_post_post_meta_new_sanitized_key', array( $this, '_new_sanitize_meta_cb' ) );
     224
     225                $this->assertFalse( $has_filter );
     226        }
     227
     228        public function test_register_meta_unregistered_meta_key_removes_auth_filter() {
     229                register_meta( 'post', 'new_auth_key', array( 'object_subtype' => 'post', 'auth_callback' => array( $this, '_new_auth_meta_cb' ) ) );
     230                unregister_meta_key( 'post', 'post', 'new_auth_key' );
     231
     232                $has_filter = has_filter( 'auth_post_post_meta_new_auth_key', array( $this, '_new_auth_meta_cb' ) );
     233
     234                $this->assertFalse( $has_filter );
     235        }
     236
    221237        public function test_unregister_meta_key_clears_key_from_wp_meta_keys() {
    222238                global $wp_meta_keys;
    223239                register_meta( 'post', 'registered_key', array( 'object_subtype' => 'post' ) );