Make WordPress Core

Changeset 59965


Ignore:
Timestamp:
03/11/2025 06:13:47 AM (13 days ago)
Author:
Mamaduka
Message:

REST API: Add additional default template data fields for the active theme.

The active theme(s) now return two additional properties, default_template_types and default_template_part_areas, in the REST response.

Props mamaduka, joemcgill, timothyblynjacobs, audrasjb, gigitux, peterwilsoncc, youknowriad, jorbin.
Fixes #62574.

Location:
trunk
Files:
2 edited

Legend:

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

    r58694 r59965  
    349349        }
    350350
     351        if ( rest_is_field_included( 'default_template_types', $fields ) && $this->is_same_theme( $theme, $current_theme ) ) {
     352            $default_template_types = array();
     353            foreach ( get_default_block_template_types() as $slug => $template_type ) {
     354                $template_type['slug']    = (string) $slug;
     355                $default_template_types[] = $template_type;
     356            }
     357            $data['default_template_types'] = $default_template_types;
     358        }
     359
     360        if ( rest_is_field_included( 'default_template_part_areas', $fields ) && $this->is_same_theme( $theme, $current_theme ) ) {
     361            $data['default_template_part_areas'] = get_allowed_block_template_part_areas();
     362        }
     363
    351364        $data = $this->add_additional_fields_to_object( $data, $request );
    352365
     
    460473            'type'       => 'object',
    461474            'properties' => array(
    462                 'stylesheet'     => array(
     475                'stylesheet'                  => array(
    463476                    'description' => __( 'The theme\'s stylesheet. This uniquely identifies the theme.' ),
    464477                    'type'        => 'string',
    465478                    'readonly'    => true,
    466479                ),
    467                 'stylesheet_uri' => array(
     480                'stylesheet_uri'              => array(
    468481                    'description' => __( 'The uri for the theme\'s stylesheet directory.' ),
    469482                    'type'        => 'string',
     
    471484                    'readonly'    => true,
    472485                ),
    473                 'template'       => array(
     486                'template'                    => array(
    474487                    'description' => __( 'The theme\'s template. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet.' ),
    475488                    'type'        => 'string',
    476489                    'readonly'    => true,
    477490                ),
    478                 'template_uri'   => array(
     491                'template_uri'                => array(
    479492                    'description' => __( 'The uri for the theme\'s template directory. If this is a child theme, this refers to the parent theme, otherwise this is the same as the theme\'s stylesheet directory.' ),
    480493                    'type'        => 'string',
     
    482495                    'readonly'    => true,
    483496                ),
    484                 'author'         => array(
     497                'author'                      => array(
    485498                    'description' => __( 'The theme author.' ),
    486499                    'type'        => 'object',
     
    497510                    ),
    498511                ),
    499                 'author_uri'     => array(
     512                'author_uri'                  => array(
    500513                    'description' => __( 'The website of the theme author.' ),
    501514                    'type'        => 'object',
     
    514527                    ),
    515528                ),
    516                 'description'    => array(
     529                'description'                 => array(
    517530                    'description' => __( 'A description of the theme.' ),
    518531                    'type'        => 'object',
     
    529542                    ),
    530543                ),
    531                 'is_block_theme' => array(
     544                'is_block_theme'              => array(
    532545                    'description' => __( 'Whether the theme is a block-based theme.' ),
    533546                    'type'        => 'boolean',
    534547                    'readonly'    => true,
    535548                ),
    536                 'name'           => array(
     549                'name'                        => array(
    537550                    'description' => __( 'The name of the theme.' ),
    538551                    'type'        => 'object',
     
    549562                    ),
    550563                ),
    551                 'requires_php'   => array(
     564                'requires_php'                => array(
    552565                    'description' => __( 'The minimum PHP version required for the theme to work.' ),
    553566                    'type'        => 'string',
    554567                    'readonly'    => true,
    555568                ),
    556                 'requires_wp'    => array(
     569                'requires_wp'                 => array(
    557570                    'description' => __( 'The minimum WordPress version required for the theme to work.' ),
    558571                    'type'        => 'string',
    559572                    'readonly'    => true,
    560573                ),
    561                 'screenshot'     => array(
     574                'screenshot'                  => array(
    562575                    'description' => __( 'The theme\'s screenshot URL.' ),
    563576                    'type'        => 'string',
     
    565578                    'readonly'    => true,
    566579                ),
    567                 'tags'           => array(
     580                'tags'                        => array(
    568581                    'description' => __( 'Tags indicating styles and features of the theme.' ),
    569582                    'type'        => 'object',
     
    583596                    ),
    584597                ),
    585                 'textdomain'     => array(
     598                'textdomain'                  => array(
    586599                    'description' => __( 'The theme\'s text domain.' ),
    587600                    'type'        => 'string',
    588601                    'readonly'    => true,
    589602                ),
    590                 'theme_supports' => array(
     603                'theme_supports'              => array(
    591604                    'description' => __( 'Features supported by this theme.' ),
    592605                    'type'        => 'object',
     
    594607                    'properties'  => array(),
    595608                ),
    596                 'theme_uri'      => array(
     609                'theme_uri'                   => array(
    597610                    'description' => __( 'The URI of the theme\'s webpage.' ),
    598611                    'type'        => 'object',
     
    611624                    ),
    612625                ),
    613                 'version'        => array(
     626                'version'                     => array(
    614627                    'description' => __( 'The theme\'s current version.' ),
    615628                    'type'        => 'string',
    616629                    'readonly'    => true,
    617630                ),
    618                 'status'         => array(
     631                'status'                      => array(
    619632                    'description' => __( 'A named status for the theme.' ),
    620633                    'type'        => 'string',
    621634                    'enum'        => array( 'inactive', 'active' ),
     635                ),
     636                'default_template_types'      => array(
     637                    'description' => __( 'A list of default template types.' ),
     638                    'type'        => 'array',
     639                    'readonly'    => true,
     640                    'items'       => array(
     641                        'type'       => 'object',
     642                        'properties' => array(
     643                            'slug'        => array(
     644                                'type' => 'string',
     645                            ),
     646                            'title'       => array(
     647                                'type' => 'string',
     648                            ),
     649                            'description' => array(
     650                                'type' => 'string',
     651                            ),
     652                        ),
     653                    ),
     654                ),
     655                'default_template_part_areas' => array(
     656                    'description' => __( 'A list of allowed area values for template parts.' ),
     657                    'type'        => 'array',
     658                    'readonly'    => true,
     659                    'items'       => array(
     660                        'type'       => 'object',
     661                        'properties' => array(
     662                            'area'        => array(
     663                                'type' => 'string',
     664                            ),
     665                            'label'       => array(
     666                                'type' => 'string',
     667                            ),
     668                            'description' => array(
     669                                'type' => 'string',
     670                            ),
     671                            'icon'        => array(
     672                                'type' => 'string',
     673                            ),
     674                            'area_tag'    => array(
     675                                'type' => 'string',
     676                            ),
     677                        ),
     678                    ),
    622679                ),
    623680            ),
  • trunk/tests/phpunit/tests/rest-api/rest-themes-controller.php

    r59822 r59965  
    164164     * @ticket 45016
    165165     * @ticket 61021
     166     * @ticket 62574.
    166167     */
    167168    public function test_get_items() {
     
    176177            'author',
    177178            'author_uri',
     179            'default_template_part_areas',
     180            'default_template_types',
    178181            'description',
    179182            'is_block_theme',
     
    355358     * @ticket 45016
    356359     * @ticket 61021
     360     * @ticket 62574
    357361     */
    358362    public function test_get_item_schema() {
     
    360364        $data       = $response->get_data();
    361365        $properties = $data['schema']['properties'];
    362         $this->assertCount( 18, $properties );
     366        $this->assertCount( 20, $properties );
    363367
    364368        $this->assertArrayHasKey( 'author', $properties );
     
    373377        $this->assertArrayHasKey( 'raw', $properties['description']['properties'] );
    374378        $this->assertArrayHasKey( 'rendered', $properties['description']['properties'] );
     379
     380        $this->assertArrayHasKey( 'default_template_part_areas', $properties );
     381        $this->assertArrayHasKey( 'default_template_types', $properties );
    375382
    376383        $this->assertArrayHasKey( 'is_block_theme', $properties );
     
    474481
    475482    /**
     483     * @ticket 62574
     484     */
     485    public function test_theme_default_template_part_areas() {
     486        $response = self::perform_active_theme_request();
     487        $result   = $response->get_data();
     488        $this->assertArrayHasKey( 'default_template_part_areas', $result[0] );
     489        $this->assertSame( get_allowed_block_template_part_areas(), $result[0]['default_template_part_areas'] );
     490    }
     491
     492    /**
     493     * @ticket 62574
     494     */
     495    public function test_theme_default_template_types() {
     496        $response = self::perform_active_theme_request();
     497        $result   = $response->get_data();
     498        $expected = array();
     499        foreach ( get_default_block_template_types() as $slug => $template_type ) {
     500            $template_type['slug'] = (string) $slug;
     501            $expected[]            = $template_type;
     502        }
     503
     504        $this->assertArrayHasKey( 'default_template_types', $result[0] );
     505        $this->assertSame( $expected, $result[0]['default_template_types'] );
     506    }
     507
     508    /**
    476509     * @ticket 49906
    477510     */
Note: See TracChangeset for help on using the changeset viewer.