WordPress.org

Make WordPress Core

Ticket #43941: 43941.6.diff

File 43941.6.diff, 11.6 KB (added by kadamwhite, 11 months ago)

PHPCBF

  • src/wp-admin/includes/class-wp-ms-sites-list-table.php

    diff --git src/wp-admin/includes/class-wp-ms-sites-list-table.php src/wp-admin/includes/class-wp-ms-sites-list-table.php
    index 5147139835..9e73490bb7 100644
    class WP_MS_Sites_List_Table extends WP_List_Table { 
    236236                                ? ' class="current" aria-current="page"'
    237237                                : '';
    238238                        if ( (int) $counts[ $status ] > 0 ) {
    239                                 $label = sprintf( translate_nooped_plural( $label_count, $counts[ $status ] ), number_format_i18n( $counts[ $status ] ) );
     239                                $label    = sprintf( translate_nooped_plural( $label_count, $counts[ $status ] ), number_format_i18n( $counts[ $status ] ) );
    240240                                $full_url = 'all' === $status ? $url : add_query_arg( 'status', $status, $url );
    241241
    242242                                $view_links[ $status ] = sprintf(
  • src/wp-includes/meta.php

    diff --git src/wp-includes/meta.php src/wp-includes/meta.php
    index bc6b05d953..c6659b3d4c 100644
    function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_ 
    206206
    207207        // Compare existing value to new value if no prev value given and the key exists only once.
    208208        if ( empty( $prev_value ) ) {
     209                remove_filter( "default_{$meta_type}_metadata", 'filter_default_metadata', 10, 5 );
    209210                $old_value = get_metadata( $meta_type, $object_id, $meta_key );
     211                add_filter( "default_{$meta_type}_metadata", 'filter_default_metadata', 10, 5 );
    210212                if ( count( $old_value ) == 1 ) {
    211213                        if ( $old_value[0] === $meta_value ) {
    212214                                return false;
    function get_metadata( $meta_type, $object_id, $meta_key = '', $single = false ) 
    542544                }
    543545        }
    544546
     547        return get_metadata_default( $meta_type, $meta_key, $single, $object_id );
     548}
     549
     550/**
     551 * Retrieve metadata data default for the specified object.
     552 *
     553 * @since 5.3.0
     554 *
     555 * @param string $meta_type Type of object metadata is for (e.g., comment, post, term, or user).
     556 * @param string $meta_key  Optional. Metadata key. If not specified, retrieve all metadata for
     557 *                          the specified object.
     558 * @param bool   $single    Optional, default is false.
     559 *                          If true, return only the first value of the specified meta_key.
     560 *                          This parameter has no effect if meta_key is not specified.
     561 * @param int    $object_id Optional, default is 0.
     562 *                          ID of the object metadata is for
     563 * @return mixed Single metadata value, or array of values
     564 */
     565function get_metadata_default( $meta_type, $meta_key, $single = false, $object_id = 0 ) {
    545566        if ( $single ) {
    546                 return '';
     567                $value = '';
    547568        } else {
    548                 return array();
     569                $value = array();
    549570        }
     571
     572        /**
     573         * Filter the default value a specified object.
     574         *
     575         * @since 5.3.0
     576         *
     577         * @param array|string      $value     The value should return - a single metadata value,
     578         *                                     or an array of values.
     579         * @param string            $meta_type Type of object metadata is for (e.g., comment, post, term, or user).
     580         * @param string            $meta_key  Meta key.
     581         * @param bool              $single    Whether to return only the first value of the specified $meta_key.
     582         * @param int               $object_id Object ID.
     583         */
     584        $value = apply_filters( "default_{$meta_type}_metadata", $value, $meta_type, $meta_key, $single, $object_id );
     585
     586        return $value;
    550587}
    551588
    552589/**
    function register_meta( $object_type, $meta_key, $args, $deprecated = null ) { 
    12291266                }
    12301267        }
    12311268
     1269        if ( false === $args['single'] && ! wp_is_numeric_array( $args['default'] ) ) {
     1270                unset( $args['default'] );
     1271        }
     1272
     1273        if ( array_key_exists( 'default', $args ) ) {
     1274                add_filter( "default_{$object_type}_metadata", 'filter_default_metadata', 10, 5 );
     1275        }
     1276
    12321277        // Global registry only contains meta keys registered with the array of arguments added in 4.6.0.
    12331278        if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) {
    12341279                unset( $args['object_subtype'] );
    function get_object_subtype( $object_type, $object_id ) { 
    14571502         */
    14581503        return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id );
    14591504}
     1505
     1506/**
     1507 * Filter into default_{$object_type}_metadata and add in default value.
     1508 *
     1509 * @since 5.3.0
     1510 *
     1511 * @param mixed  $value     Current value passed to filter.
     1512 * @param string $meta_type Type of object metadata is for (e.g., comment, post, term, or user).
     1513
     1514 * @param string $meta_key  Optional. Metadata key. If not specified, retrieve all metadata for
     1515 *                          the specified object.
     1516 * @param bool   $single    Optional, default is false.
     1517 *                          If true, return only the first value of the specified meta_key.
     1518 *                          This parameter has no effect if meta_key is not specified.
     1519 * @param int    $object_id ID of the object metadata is for
     1520 *
     1521 * @return mixed Single metadata default, or array of defaults
     1522 */
     1523function filter_default_metadata( $value, $meta_type, $meta_key, $single, $object_id ) {
     1524        $metadata = get_registered_meta_keys( $meta_type );
     1525        if ( ! isset( $metadata[ $meta_key ] ) ) {
     1526                $sub_type = get_object_subtype( $meta_type, $object_id );
     1527                $metadata = get_registered_meta_keys( $meta_type, $sub_type );
     1528                if ( ! isset( $metadata[ $meta_key ] ) ) {
     1529                        return $value;
     1530                }
     1531        }
     1532
     1533        if ( $single ) {
     1534                if ( $metadata[ $meta_key ]['single'] ) {
     1535                        $value = $metadata[ $meta_key ]['default'];
     1536                } else {
     1537                        $value = $metadata[ $meta_key ]['default'][0];
     1538                }
     1539        } else {
     1540                $value = $metadata[ $meta_key ]['default'];
     1541        }
     1542
     1543        return $value;
     1544}
  • tests/phpunit/tests/meta/registerMeta.php

    diff --git tests/phpunit/tests/meta/registerMeta.php tests/phpunit/tests/meta/registerMeta.php
    index 334a2320d0..fcf6c1b449 100644
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    9595                                                'description'       => '',
    9696                                                'single'            => false,
    9797                                                'sanitize_callback' => null,
     98                                                'default'           => null,
    9899                                                'auth_callback'     => '__return_true',
    99100                                                'show_in_rest'      => false,
    100101                                        ),
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    119120                                                'description'       => '',
    120121                                                'single'            => false,
    121122                                                'sanitize_callback' => null,
     123                                                'default'           => null,
    122124                                                'auth_callback'     => '__return_true',
    123125                                                'show_in_rest'      => false,
    124126                                        ),
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    172174                                                'type'              => 'string',
    173175                                                'description'       => '',
    174176                                                'single'            => false,
     177                                                'default'           => null,
    175178                                                'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ),
    176179                                                'auth_callback'     => '__return_true',
    177180                                                'show_in_rest'      => false,
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    340343                                                'description'       => '',
    341344                                                'single'            => false,
    342345                                                'sanitize_callback' => null,
     346                                                'default'           => null,
    343347                                                'auth_callback'     => '__return_true',
    344348                                                'show_in_rest'      => false,
    345349                                        ),
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    393397                                                'description'       => '',
    394398                                                'single'            => false,
    395399                                                'sanitize_callback' => null,
     400                                                'default'           => null,
    396401                                                'auth_callback'     => '__return_true',
    397402                                                'show_in_rest'      => false,
    398403                                        ),
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    504509                $this->assertSame( 'even', $subtype_for_4 );
    505510        }
    506511
     512        /**
     513         * @ticket 43941
     514         * @dataProvider data_get_default_data
     515         */
     516        public function test_get_default_value( $args, $single, $expected ) {
     517
     518                $object_type = 'post';
     519                $meta_key    = 'registered_key1';
     520                register_meta(
     521                        $object_type,
     522                        $meta_key,
     523                        $args
     524                );
     525
     526                $object_property_name = $object_type . '_id';
     527                $object_id            = self::$$object_property_name;
     528
     529                // Check for default value.
     530                $value = get_metadata( $object_type, $object_id, $meta_key, $single );
     531                $this->assertSame( $value, $expected );
     532
     533                // Set value to check default is not being returned by mistake.
     534                $meta_value = 'dibble';
     535                update_metadata( $object_type, $object_id, $meta_key, $meta_value );
     536                $value = get_metadata( $object_type, $object_id, $meta_key, true );
     537                $this->assertSame( $value, $meta_value );
     538
     539                // Delete meta, make sure the default is returned.
     540                delete_metadata( $object_type, $object_id, $meta_key );
     541                $value = get_metadata( $object_type, $object_id, $meta_key, $single );
     542                $this->assertSame( $value, $expected );
     543
     544                // Set other meta key, to make sure other keys are not effects.
     545                $meta_value = 'hibble';
     546                $meta_key   = 'unregistered_key1';
     547                $value      = get_metadata( $object_type, $object_id, $meta_key, true );
     548                $this->assertSame( $value, '' );
     549                update_metadata( $object_type, $object_id, $meta_key, $meta_value );
     550                $value = get_metadata( $object_type, $object_id, $meta_key, true );
     551                $this->assertSame( $value, $meta_value );
     552
     553        }
     554
    507555        public function filter_get_object_subtype_for_customtype( $subtype, $object_id ) {
    508556                if ( 1 === ( $object_id % 2 ) ) {
    509557                        return 'odd';
    class Tests_Meta_Register_Meta extends WP_UnitTestCase { 
    512560                return 'even';
    513561        }
    514562
     563        public function data_get_default_data() {
     564                return array(
     565                        array(
     566                                array(
     567                                        'single'  => true,
     568                                        'default' => 'wibble',
     569                                ),
     570                                true,
     571                                'wibble',
     572                        ),
     573                        array(
     574                                array(
     575                                        'single'  => true,
     576                                        'default' => 'wibble',
     577                                ),
     578                                false,
     579                                array( 'wibble' ),
     580                        ),
     581                        array(
     582                                array(
     583                                        'single'  => true,
     584                                        'default' => array( 'wibble' ),
     585                                ),
     586                                true,
     587                                array( 'wibble' ),
     588                        ),
     589                        array(
     590                                array(
     591                                        'single'  => true,
     592                                        'default' => array( 'wibble' ),
     593                                ),
     594                                false,
     595                                array( array( 'wibble' ) ),
     596                        ),
     597                        array(
     598                                array(
     599                                        'single'  => false,
     600                                        'default' => 'wibble',
     601                                ),
     602                                true,
     603                                '',
     604                        ),
     605                        array(
     606                                array(
     607                                        'single'  => false,
     608                                        'default' => 'wibble',
     609                                ),
     610                                false,
     611                                array(),
     612                        ),
     613                        array(
     614                                array(
     615                                        'single'  => false,
     616                                        'default' => array( 'wibble' ),
     617                                ),
     618                                true,
     619                                'wibble',
     620                        ),
     621                        array(
     622                                array(
     623                                        'single'  => false,
     624                                        'default' => array( 'wibble' ),
     625                                ),
     626                                false,
     627                                array( 'wibble' ),
     628                        ),
     629                        array(
     630                                array(
     631                                        'single'         => true,
     632                                        'object_subtype' => 'page',
     633                                        'default'        => 'wibble',
     634                                ),
     635                                true,
     636                                'wibble',
     637                        ),
     638                        array(
     639                                array(
     640                                        'single'         => true,
     641                                        'object_subtype' => 'page',
     642                                        'default'        => 'wibble',
     643                                ),
     644                                false,
     645                                array( 'wibble' ),
     646                        ),
     647                        array(
     648                                array(
     649                                        'single'         => true,
     650                                        'object_subtype' => 'page',
     651                                        'default'        => array( 'wibble' ),
     652                                ),
     653                                true,
     654                                array( 'wibble' ),
     655                        ),
     656                        array(
     657                                array(
     658                                        'single'         => true,
     659                                        'object_subtype' => 'page',
     660                                        'default'        => array( 'wibble' ),
     661                                ),
     662                                false,
     663                                array( array( 'wibble' ) ),
     664                        ),
     665                        array(
     666                                array(
     667                                        'single'         => true,
     668                                        'object_subtype' => 'post',
     669                                        'default'        => 'wibble',
     670                                ),
     671                                true,
     672                                '',
     673                        ),
     674                        array(
     675                                array(
     676                                        'single'         => true,
     677                                        'object_subtype' => 'post',
     678                                        'default'        => 'wibble',
     679                                ),
     680                                false,
     681                                array(),
     682                        ),
     683                        array(
     684                                array(
     685                                        'single'         => true,
     686                                        'object_subtype' => 'post',
     687                                        'default'        => array( 'wibble' ),
     688                                ),
     689                                true,
     690                                '',
     691                        ),
     692                        array(
     693                                array(
     694                                        'single'         => true,
     695                                        'object_subtype' => 'post',
     696                                        'default'        => array( 'wibble' ),
     697                                ),
     698                                false,
     699                                array(),
     700                        ),
     701                );
     702        }
     703
    515704        public function data_get_types_and_subtypes() {
    516705                return array(
    517706                        array( 'post', 'page' ),