REST API: Fix PHP warnings when get_theme_support( 'post-formats' )
is not an array.
If `add_theme_support( 'post-formats' )` is called with no additional arguments, then `get_theme_support( 'post-formats' )` returns `true` rather than an array of supported formats. Avoid generating PHP warnings in this situation. Props dreamon11, ChopinBach. Fixes #39293. git-svn-id: https://develop.svn.wordpress.org/trunk@39620 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
9705ad5510
commit
8bbfc6ef28
@ -1923,10 +1923,16 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
|
||||
|
||||
case 'post-formats':
|
||||
$supports_formats = get_theme_support( 'post-formats' );
|
||||
|
||||
// Force to an array. Supports formats can return true even if empty in some cases.
|
||||
$supports_formats = is_array( $supports_formats ) ? array_values( $supports_formats[0] ) : array();
|
||||
|
||||
$supported_formats = array_merge( array( 'standard' ), $supports_formats );
|
||||
|
||||
$schema['properties']['format'] = array(
|
||||
'description' => __( 'The format for the object.' ),
|
||||
'type' => 'string',
|
||||
'enum' => array_merge( array( 'standard' ), $supports_formats ? array_values( $supports_formats[0] ) : array() ),
|
||||
'enum' => $supported_formats,
|
||||
'context' => array( 'view', 'edit' ),
|
||||
);
|
||||
break;
|
||||
|
@ -858,6 +858,24 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te
|
||||
$this->assertEquals( $post2, $data[0]['id'] );
|
||||
}
|
||||
|
||||
public function test_get_items_no_supported_post_formats() {
|
||||
// This causes get_theme_support( 'post-formats' ) to return `true` (not an array)
|
||||
add_theme_support( 'post-formats' );
|
||||
|
||||
$request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' );
|
||||
$response = $this->server->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
|
||||
// Set the expected state back for the rest of the tests.
|
||||
global $_wp_theme_features;
|
||||
unset( $_wp_theme_features['post-formats'] );
|
||||
add_theme_support( 'post-formats', array( 'post', 'gallery' ) );
|
||||
|
||||
$formats = array( 'standard' );
|
||||
|
||||
$this->assertEquals( $formats, $data['schema']['properties']['format']['enum'] );
|
||||
}
|
||||
|
||||
public function test_get_item() {
|
||||
$request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', self::$post_id ) );
|
||||
$response = $this->server->dispatch( $request );
|
||||
|
Loading…
Reference in New Issue
Block a user