Make WordPress Core

Changeset 40120


Ignore:
Timestamp:
02/24/2017 11:29:04 PM (8 years ago)
Author:
jnylen0
Message:

REST API: Allow setting post formats even if they are not supported by the theme.

A post_format not used by the current theme, but supported by core is not a wrong/broken piece of information. It's just not used at this point in time. Therefore we should allow setting and retrieving any of the standard post formats supported in core, even if the current theme doesn't use them.

After this commit, a post's format value can survive a round trip through the API, which is a good general design principle for an API.

Props JPry, iseulde, davidakennedy, Drivingralle.
Fixes #39232.

Location:
trunk
Files:
2 edited

Legend:

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

    r40108 r40120  
    19901990
    19911991                case 'post-formats':
    1992                     $supports_formats = get_theme_support( 'post-formats' );
    1993 
    1994                     // Force to an array. Supports formats can return true even if empty in some cases.
    1995                     $supports_formats = is_array( $supports_formats ) ? array_values( $supports_formats[0] ) : array();
    1996 
    1997                     $supported_formats = array_merge( array( 'standard' ), $supports_formats );
     1992                    // Get the native post formats and remove the array keys.
     1993                    $formats = array_values( get_post_format_slugs() );
    19981994
    19991995                    $schema['properties']['format'] = array(
    20001996                        'description' => __( 'The format for the object.' ),
    20011997                        'type'        => 'string',
    2002                         'enum'        => $supported_formats,
     1998                        'enum'        => $formats,
    20031999                        'context'     => array( 'view', 'edit' ),
    20042000                    );
  • trunk/tests/phpunit/tests/rest-api/rest-posts-controller.php

    r40108 r40120  
    915915    }
    916916
    917     public function test_get_items_no_supported_post_formats() {
    918         // This causes get_theme_support( 'post-formats' ) to return `true` (not an array)
    919         add_theme_support( 'post-formats' );
    920 
     917    public function test_get_items_all_post_formats() {
    921918        $request = new WP_REST_Request( 'OPTIONS', '/wp/v2/posts' );
    922919        $response = $this->server->dispatch( $request );
    923920        $data = $response->get_data();
    924921
    925         // Set the expected state back for the rest of the tests.
    926         global $_wp_theme_features;
    927         unset( $_wp_theme_features['post-formats'] );
    928         add_theme_support( 'post-formats', array( 'post', 'gallery' ) );
    929 
    930         $formats = array( 'standard' );
     922        $formats = array_values( get_post_format_slugs() );
    931923
    932924        $this->assertEquals( $formats, $data['schema']['properties']['format']['enum'] );
     
    15761568        $request->set_body_params( $params );
    15771569        $response = $this->server->dispatch( $request );
    1578 
    1579         $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     1570        $this->assertEquals( 201, $response->get_status() );
     1571
     1572        $data = $response->get_data();
     1573        $this->assertEquals( 'link', $data['format'] );
    15801574    }
    15811575
     
    20742068        $request->set_body_params( $params );
    20752069        $response = $this->server->dispatch( $request );
    2076 
    2077         $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     2070        $this->assertEquals( 200, $response->get_status() );
     2071
     2072        $data = $response->get_data();
     2073        $this->assertEquals( 'link', $data['format'] );
    20782074    }
    20792075
Note: See TracChangeset for help on using the changeset viewer.