WordPress.org

Make WordPress Core

Changeset 39620


Ignore:
Timestamp:
12/20/16 00:55:04 (7 months ago)
Author:
jnylen0
Message:

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.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    r39595 r39620  
    19241924                case 'post-formats': 
    19251925                    $supports_formats = get_theme_support( 'post-formats' ); 
     1926 
     1927                    // Force to an array. Supports formats can return true even if empty in some cases. 
     1928                    $supports_formats = is_array( $supports_formats ) ? array_values( $supports_formats[0] ) : array(); 
     1929 
     1930                    $supported_formats = array_merge( array( 'standard' ), $supports_formats ); 
     1931 
    19261932                    $schema['properties']['format'] = array( 
    19271933                        'description' => __( 'The format for the object.' ), 
    19281934                        'type'        => 'string', 
    1929                         'enum'        => array_merge( array( 'standard' ), $supports_formats ? array_values( $supports_formats[0] ) : array() ), 
     1935                        'enum'        => $supported_formats, 
    19301936                        'context'     => array( 'view', 'edit' ), 
    19311937                    ); 
  • trunk/tests/phpunit/tests/rest-api/rest-posts-controller.php

    r39595 r39620  
    857857        $this->assertCount( 1, $data ); 
    858858        $this->assertEquals( $post2, $data[0]['id'] ); 
     859    } 
     860 
     861    public function test_get_items_no_supported_post_formats() { 
     862        // This causes get_theme_support( 'post-formats' ) to return `true` (not an array) 
     863        add_theme_support( 'post-formats' ); 
     864 
     865        $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' ); 
     866        $response = $this->server->dispatch( $request ); 
     867        $data = $response->get_data(); 
     868 
     869        // Set the expected state back for the rest of the tests. 
     870        global $_wp_theme_features; 
     871        unset( $_wp_theme_features['post-formats'] ); 
     872        add_theme_support( 'post-formats', array( 'post', 'gallery' ) ); 
     873 
     874        $formats = array( 'standard' ); 
     875 
     876        $this->assertEquals( $formats, $data['schema']['properties']['format']['enum'] ); 
    859877    } 
    860878 
Note: See TracChangeset for help on using the changeset viewer.