mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-05-25 21:54:28 +00:00
REST API: Check the results of get_metadata() in WP_REST_Meta_Fields methods.
This avoids PHP warnings in case the function returns boolean `false` instead of an array. Props david.binda. Fixes #53099. git-svn-id: https://develop.svn.wordpress.org/trunk@50793 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -94,8 +94,10 @@ abstract class WP_REST_Meta_Fields {
|
||||
} else {
|
||||
$value = array();
|
||||
|
||||
foreach ( $all_values as $row ) {
|
||||
$value[] = $this->prepare_value_for_response( $row, $request, $args );
|
||||
if ( is_array( $all_values ) ) {
|
||||
foreach ( $all_values as $row ) {
|
||||
$value[] = $this->prepare_value_for_response( $row, $request, $args );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -281,6 +283,10 @@ abstract class WP_REST_Meta_Fields {
|
||||
$current_values = get_metadata( $meta_type, $object_id, $meta_key, false );
|
||||
$subtype = get_object_subtype( $meta_type, $object_id );
|
||||
|
||||
if ( ! is_array( $current_values ) ) {
|
||||
$current_values = array();
|
||||
}
|
||||
|
||||
$to_remove = $current_values;
|
||||
$to_add = $values;
|
||||
|
||||
@@ -377,7 +383,9 @@ abstract class WP_REST_Meta_Fields {
|
||||
$old_value = get_metadata( $meta_type, $object_id, $meta_key );
|
||||
$subtype = get_object_subtype( $meta_type, $object_id );
|
||||
|
||||
if ( 1 === count( $old_value ) && $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value ) ) {
|
||||
if ( is_array( $old_value ) && 1 === count( $old_value )
|
||||
&& $this->is_meta_value_same_as_stored_value( $meta_key, $subtype, $old_value[0], $value )
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1285,6 +1285,54 @@ class WP_Test_REST_Term_Meta_Fields extends WP_Test_REST_TestCase {
|
||||
$this->assertSame( 'Goodbye', $meta[ $meta_key ] );
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 53099
|
||||
*/
|
||||
public function test_get_term_metadata_returning_false_does_not_cause_php_warnings() {
|
||||
add_filter( 'get_term_metadata', '__return_false', 11 );
|
||||
|
||||
// No PHP warning during GET request.
|
||||
add_term_meta( self::$category_id, 'test_single', 'testvalue' );
|
||||
$request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
||||
// No PHP warning during POST request.
|
||||
$this->grant_write_permission();
|
||||
$data = array(
|
||||
'meta' => array(
|
||||
'test_multi' => array( 'val1' ),
|
||||
),
|
||||
);
|
||||
$request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
|
||||
$request->set_body_params( $data );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
||||
// No PHP warning during validation.
|
||||
register_meta(
|
||||
'term',
|
||||
'my_meta_key',
|
||||
array(
|
||||
'show_in_rest' => true,
|
||||
'single' => true,
|
||||
'type' => 'integer',
|
||||
)
|
||||
);
|
||||
$this->grant_write_permission();
|
||||
$data = array(
|
||||
'meta' => array(
|
||||
'my_meta_key' => '1', // Set to a string.
|
||||
),
|
||||
);
|
||||
$request = new WP_REST_Request( 'POST', sprintf( '/wp/v2/categories/%d', self::$category_id ) );
|
||||
$request->set_body_params( $data );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
||||
remove_filter( 'get_term_metadata', '__return_false', 11 );
|
||||
|
||||
$data = $response->get_data();
|
||||
$this->assertSame( 0, $data['meta']['my_meta_key'] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal function used to disable an insert query which
|
||||
* will trigger a wpdb error for testing purposes.
|
||||
|
||||
Reference in New Issue
Block a user