Ticket #43941: 43941.6.diff
File 43941.6.diff, 11.6 KB (added by , 5 years ago) |
---|
-
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 { 236 236 ? ' class="current" aria-current="page"' 237 237 : ''; 238 238 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 ] ) ); 240 240 $full_url = 'all' === $status ? $url : add_query_arg( 'status', $status, $url ); 241 241 242 242 $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_ 206 206 207 207 // Compare existing value to new value if no prev value given and the key exists only once. 208 208 if ( empty( $prev_value ) ) { 209 remove_filter( "default_{$meta_type}_metadata", 'filter_default_metadata', 10, 5 ); 209 210 $old_value = get_metadata( $meta_type, $object_id, $meta_key ); 211 add_filter( "default_{$meta_type}_metadata", 'filter_default_metadata', 10, 5 ); 210 212 if ( count( $old_value ) == 1 ) { 211 213 if ( $old_value[0] === $meta_value ) { 212 214 return false; … … function get_metadata( $meta_type, $object_id, $meta_key = '', $single = false ) 542 544 } 543 545 } 544 546 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 */ 565 function get_metadata_default( $meta_type, $meta_key, $single = false, $object_id = 0 ) { 545 566 if ( $single ) { 546 return'';567 $value = ''; 547 568 } else { 548 returnarray();569 $value = array(); 549 570 } 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; 550 587 } 551 588 552 589 /** … … function register_meta( $object_type, $meta_key, $args, $deprecated = null ) { 1229 1266 } 1230 1267 } 1231 1268 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 1232 1277 // Global registry only contains meta keys registered with the array of arguments added in 4.6.0. 1233 1278 if ( ! $has_old_auth_cb && ! $has_old_sanitize_cb ) { 1234 1279 unset( $args['object_subtype'] ); … … function get_object_subtype( $object_type, $object_id ) { 1457 1502 */ 1458 1503 return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id ); 1459 1504 } 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 */ 1523 function 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 { 95 95 'description' => '', 96 96 'single' => false, 97 97 'sanitize_callback' => null, 98 'default' => null, 98 99 'auth_callback' => '__return_true', 99 100 'show_in_rest' => false, 100 101 ), … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 119 120 'description' => '', 120 121 'single' => false, 121 122 'sanitize_callback' => null, 123 'default' => null, 122 124 'auth_callback' => '__return_true', 123 125 'show_in_rest' => false, 124 126 ), … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 172 174 'type' => 'string', 173 175 'description' => '', 174 176 'single' => false, 177 'default' => null, 175 178 'sanitize_callback' => array( $this, '_new_sanitize_meta_cb' ), 176 179 'auth_callback' => '__return_true', 177 180 'show_in_rest' => false, … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 340 343 'description' => '', 341 344 'single' => false, 342 345 'sanitize_callback' => null, 346 'default' => null, 343 347 'auth_callback' => '__return_true', 344 348 'show_in_rest' => false, 345 349 ), … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 393 397 'description' => '', 394 398 'single' => false, 395 399 'sanitize_callback' => null, 400 'default' => null, 396 401 'auth_callback' => '__return_true', 397 402 'show_in_rest' => false, 398 403 ), … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 504 509 $this->assertSame( 'even', $subtype_for_4 ); 505 510 } 506 511 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 507 555 public function filter_get_object_subtype_for_customtype( $subtype, $object_id ) { 508 556 if ( 1 === ( $object_id % 2 ) ) { 509 557 return 'odd'; … … class Tests_Meta_Register_Meta extends WP_UnitTestCase { 512 560 return 'even'; 513 561 } 514 562 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 515 704 public function data_get_types_and_subtypes() { 516 705 return array( 517 706 array( 'post', 'page' ),