Make WordPress Core

Changeset 56819


Ignore:
Timestamp:
10/10/2023 02:03:03 PM (8 months ago)
Author:
spacedmonkey
Message:

REST API: Fix issue with Template and Template Part Revision/Autosave REST API controllers.

The Template and Template Part REST API controllers have unique characteristics compared to other post type REST API controllers. They do not rely on integer IDs to reference objects; instead, they use a combination of the theme name and slug of the template, like 'twentytwentyfourhome.' Consequently, when the post types template and template part were introduced in [52062], it led to the registration of REST API endpoints for autosaves and revisions with invalid URL structures.

In this commit, we introduce new functionality to enable custom autosave and revisions endpoints to be registered at the post type level. Similar to the 'rest_controller_class' parameter, developers can now define 'revisions_rest_controller' and 'autosave_rest_controller.' This empowers developers to create custom controllers for these functionalities. Additionally, we introduce a 'late_route_registration' parameter, which proves helpful when dealing with custom URL patterns and regex pattern matching issues.
This commit registers new classes for template and template part autosave and revisions controllers, differentiating them from standard controllers in the following ways:

  • The response shape now matches that of the template controller.
  • Permission checks align with the template controller.
  • A custom URL pattern is introduced to support slug-based identification of templates.

Furthermore, we've updated the utility function '_build_block_template_result_from_post' to support passing revision post objects. This enhancement ensures compatibility with the custom revisions controller.

Props spacedmonkey, revgeorge, andraganescu, hellofromTonya, antonvlasenko, kadamwhite, ironprogrammer, costdev, mukesh27, timothyblynjacobs, adamsilverstein.
Fixes 56922.

Location:
trunk
Files:
4 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/block-template-utils.php

    r56805 r56819  
    725725 * @since 5.9.0
    726726 * @since 6.3.0 Added `modified` property to template objects.
     727 * @since 6.4.0 Added support for a revision post to be passed to this function.
    727728 * @access private
    728729 *
     
    732733function _build_block_template_result_from_post( $post ) {
    733734    $default_template_types = get_default_block_template_types();
    734     $terms                  = get_the_terms( $post, 'wp_theme' );
     735
     736    $post_id = wp_is_post_revision( $post );
     737    if ( ! $post_id ) {
     738        $post_id = $post;
     739    }
     740    $parent_post = get_post( $post_id );
     741
     742    $terms = get_the_terms( $parent_post, 'wp_theme' );
    735743
    736744    if ( is_wp_error( $terms ) ) {
     
    746754    $has_theme_file = get_stylesheet() === $theme && null !== $template_file;
    747755
    748     $origin           = get_post_meta( $post->ID, 'origin', true );
    749     $is_wp_suggestion = get_post_meta( $post->ID, 'is_wp_suggestion', true );
     756    $origin           = get_post_meta( $parent_post->ID, 'origin', true );
     757    $is_wp_suggestion = get_post_meta( $parent_post->ID, 'is_wp_suggestion', true );
    750758
    751759    $template                 = new WP_Block_Template();
    752760    $template->wp_id          = $post->ID;
    753     $template->id             = $theme . '//' . $post->post_name;
     761    $template->id             = $theme . '//' . $parent_post->post_name;
    754762    $template->theme          = $theme;
    755763    $template->content        = $post->post_content;
     
    766774    $template->modified       = $post->post_modified;
    767775
    768     if ( 'wp_template' === $post->post_type && $has_theme_file && isset( $template_file['postTypes'] ) ) {
     776    if ( 'wp_template' === $parent_post->post_type && $has_theme_file && isset( $template_file['postTypes'] ) ) {
    769777        $template->post_types = $template_file['postTypes'];
    770778    }
    771779
    772     if ( 'wp_template' === $post->post_type && isset( $default_template_types[ $template->slug ] ) ) {
     780    if ( 'wp_template' === $parent_post->post_type && isset( $default_template_types[ $template->slug ] ) ) {
    773781        $template->is_custom = false;
    774782    }
    775783
    776     if ( 'wp_template_part' === $post->post_type ) {
    777         $type_terms = get_the_terms( $post, 'wp_template_part_area' );
     784    if ( 'wp_template_part' === $parent_post->post_type ) {
     785        $type_terms = get_the_terms( $parent_post, 'wp_template_part_area' );
    778786        if ( ! is_wp_error( $type_terms ) && false !== $type_terms ) {
    779787            $template->area = $type_terms[0]->name;
     
    782790
    783791    // Check for a block template without a description and title or with a title equal to the slug.
    784     if ( 'wp_template' === $post->post_type && empty( $template->description ) && ( empty( $template->title ) || $template->title === $template->slug ) ) {
     792    if ( 'wp_template' === $parent_post->post_type && empty( $template->description ) && ( empty( $template->title ) || $template->title === $template->slug ) ) {
    785793        $matches = array();
    786794
  • trunk/src/wp-includes/class-wp-post-type.php

    r56515 r56819  
    396396     */
    397397    public $rest_controller;
     398
     399    /**
     400     * The controller for this post type's revisions REST API endpoints.
     401     *
     402     * Custom controllers must extend WP_REST_Controller.
     403     *
     404     * @since 6.4.0
     405     * @var string|bool $revisions_rest_controller_class
     406     */
     407    public $revisions_rest_controller_class;
     408
     409    /**
     410     * The controller instance for this post type's revisions REST API endpoints.
     411     *
     412     * Lazily computed. Should be accessed using {@see WP_Post_Type::get_revisions_rest_controller()}.
     413     *
     414     * @since 6.4.0
     415     * @var WP_REST_Controller $revisions_rest_controller
     416     */
     417    public $revisions_rest_controller;
     418
     419    /**
     420     * The controller for this post type's autosave REST API endpoints.
     421     *
     422     * Custom controllers must extend WP_REST_Controller.
     423     *
     424     * @since 6.4.0
     425     * @var string|bool $autosave_rest_controller_class
     426     */
     427    public $autosave_rest_controller_class;
     428
     429    /**
     430     * The controller instance for this post type's autosave REST API endpoints.
     431     *
     432     * Lazily computed. Should be accessed using {@see WP_Post_Type::get_autosave_rest_controller()}.
     433     *
     434     * @since 6.4.0
     435     * @var WP_REST_Controller $autosave_rest_controller
     436     */
     437    public $autosave_rest_controller;
     438
     439    /**
     440     * A flag to register the post type REST API controller after its associated autosave / revisions controllers, instead of before. Registration order affects route matching priority.
     441     *
     442     * @since 6.4.0
     443     * @var bool $late_route_registration
     444     */
     445    public $late_route_registration;
    398446
    399447    /**
     
    456504         *
    457505         * @since 6.0.0
     506         * @since 6.4.0 Added `late_route_registration`, `autosave_rest_controller_class` and `revisions_rest_controller_class` arguments.
    458507         *
    459508         * @param array  $args      Array of arguments for registering a post type.
     
    467516        // Args prefixed with an underscore are reserved for internal use.
    468517        $defaults = array(
    469             'labels'                => array(),
    470             'description'           => '',
    471             'public'                => false,
    472             'hierarchical'          => false,
    473             'exclude_from_search'   => null,
    474             'publicly_queryable'    => null,
    475             'show_ui'               => null,
    476             'show_in_menu'          => null,
    477             'show_in_nav_menus'     => null,
    478             'show_in_admin_bar'     => null,
    479             'menu_position'         => null,
    480             'menu_icon'             => null,
    481             'capability_type'       => 'post',
    482             'capabilities'          => array(),
    483             'map_meta_cap'          => null,
    484             'supports'              => array(),
    485             'register_meta_box_cb'  => null,
    486             'taxonomies'            => array(),
    487             'has_archive'           => false,
    488             'rewrite'               => true,
    489             'query_var'             => true,
    490             'can_export'            => true,
    491             'delete_with_user'      => null,
    492             'show_in_rest'          => false,
    493             'rest_base'             => false,
    494             'rest_namespace'        => false,
    495             'rest_controller_class' => false,
    496             'template'              => array(),
    497             'template_lock'         => false,
    498             '_builtin'              => false,
    499             '_edit_link'            => 'post.php?post=%d',
     518            'labels'                          => array(),
     519            'description'                     => '',
     520            'public'                          => false,
     521            'hierarchical'                    => false,
     522            'exclude_from_search'             => null,
     523            'publicly_queryable'              => null,
     524            'show_ui'                         => null,
     525            'show_in_menu'                    => null,
     526            'show_in_nav_menus'               => null,
     527            'show_in_admin_bar'               => null,
     528            'menu_position'                   => null,
     529            'menu_icon'                       => null,
     530            'capability_type'                 => 'post',
     531            'capabilities'                    => array(),
     532            'map_meta_cap'                    => null,
     533            'supports'                        => array(),
     534            'register_meta_box_cb'            => null,
     535            'taxonomies'                      => array(),
     536            'has_archive'                     => false,
     537            'rewrite'                         => true,
     538            'query_var'                       => true,
     539            'can_export'                      => true,
     540            'delete_with_user'                => null,
     541            'show_in_rest'                    => false,
     542            'rest_base'                       => false,
     543            'rest_namespace'                  => false,
     544            'rest_controller_class'           => false,
     545            'autosave_rest_controller_class'  => false,
     546            'revisions_rest_controller_class' => false,
     547            'late_route_registration'         => false,
     548            'template'                        => array(),
     549            'template_lock'                   => false,
     550            '_builtin'                        => false,
     551            '_edit_link'                      => 'post.php?post=%d',
    500552        );
    501553
     
    815867
    816868        return $this->rest_controller;
     869    }
     870
     871    /**
     872     * Gets the REST API revisions controller for this post type.
     873     *
     874     * Will only instantiate the controller class once per request.
     875     *
     876     * @since 6.4.0
     877     *
     878     * @return WP_REST_Controller|null The controller instance, or null if the post type
     879     *                                 is set not to show in rest.
     880     */
     881    public function get_revisions_rest_controller() {
     882        if ( ! $this->show_in_rest ) {
     883            return null;
     884        }
     885
     886        if ( ! post_type_supports( $this->name, 'revisions' ) ) {
     887            return null;
     888        }
     889
     890        $class = $this->revisions_rest_controller_class ? $this->revisions_rest_controller_class : WP_REST_Revisions_Controller::class;
     891        if ( ! class_exists( $class ) ) {
     892            return null;
     893        }
     894
     895        if ( ! is_subclass_of( $class, WP_REST_Controller::class ) ) {
     896            return null;
     897        }
     898
     899        if ( ! $this->revisions_rest_controller ) {
     900            $this->revisions_rest_controller = new $class( $this->name );
     901        }
     902
     903        if ( ! ( $this->revisions_rest_controller instanceof $class ) ) {
     904            return null;
     905        }
     906
     907        return $this->revisions_rest_controller;
     908    }
     909
     910    /**
     911     * Gets the REST API autosave controller for this post type.
     912     *
     913     * Will only instantiate the controller class once per request.
     914     *
     915     * @since 6.4.0
     916     *
     917     * @return WP_REST_Controller|null The controller instance, or null if the post type
     918     *                                 is set not to show in rest.
     919     */
     920    public function get_autosave_rest_controller() {
     921        if ( ! $this->show_in_rest ) {
     922            return null;
     923        }
     924
     925        if ( 'attachment' === $this->name ) {
     926            return null;
     927        }
     928
     929        $class = $this->autosave_rest_controller_class ? $this->autosave_rest_controller_class : WP_REST_Autosaves_Controller::class;
     930
     931        if ( ! class_exists( $class ) ) {
     932            return null;
     933        }
     934
     935        if ( ! is_subclass_of( $class, WP_REST_Controller::class ) ) {
     936            return null;
     937        }
     938
     939        if ( ! $this->autosave_rest_controller ) {
     940            $this->autosave_rest_controller = new $class( $this->name );
     941        }
     942
     943        if ( ! ( $this->autosave_rest_controller instanceof $class ) ) {
     944            return null;
     945        }
     946
     947        return $this->autosave_rest_controller;
    817948    }
    818949
  • trunk/src/wp-includes/post.php

    r56811 r56819  
    347347        'wp_template',
    348348        array(
    349             'labels'                => array(
     349            'labels'                          => array(
    350350                'name'                  => _x( 'Templates', 'post type general name' ),
    351351                'singular_name'         => _x( 'Template', 'post type singular name' ),
     
    367367                'items_list'            => __( 'Templates list' ),
    368368            ),
    369             'description'           => __( 'Templates to include in your theme.' ),
    370             'public'                => false,
    371             '_builtin'              => true, /* internal use only. don't use this when registering your own post type. */
    372             '_edit_link'            => $template_edit_link, /* internal use only. don't use this when registering your own post type. */
    373             'has_archive'           => false,
    374             'show_ui'               => false,
    375             'show_in_menu'          => false,
    376             'show_in_rest'          => true,
    377             'rewrite'               => false,
    378             'rest_base'             => 'templates',
    379             'rest_controller_class' => 'WP_REST_Templates_Controller',
    380             'capability_type'       => array( 'template', 'templates' ),
    381             'capabilities'          => array(
     369            'description'                     => __( 'Templates to include in your theme.' ),
     370            'public'                          => false,
     371            '_builtin'                        => true, /* internal use only. don't use this when registering your own post type. */
     372            '_edit_link'                      => $template_edit_link, /* internal use only. don't use this when registering your own post type. */
     373            'has_archive'                     => false,
     374            'show_ui'                         => false,
     375            'show_in_menu'                    => false,
     376            'show_in_rest'                    => true,
     377            'rewrite'                         => false,
     378            'rest_base'                       => 'templates',
     379            'rest_controller_class'           => 'WP_REST_Templates_Controller',
     380            'autosave_rest_controller_class'  => 'WP_REST_Template_Autosaves_Controller',
     381            'revisions_rest_controller_class' => 'WP_REST_Template_Revisions_Controller',
     382            'late_route_registration'         => true,
     383            'capability_type'                 => array( 'template', 'templates' ),
     384            'capabilities'                    => array(
    382385                'create_posts'           => 'edit_theme_options',
    383386                'delete_posts'           => 'edit_theme_options',
     
    393396                'read_private_posts'     => 'edit_theme_options',
    394397            ),
    395             'map_meta_cap'          => true,
    396             'supports'              => array(
     398            'map_meta_cap'                    => true,
     399            'supports'                        => array(
    397400                'title',
    398401                'slug',
     
    408411        'wp_template_part',
    409412        array(
    410             'labels'                => array(
     413            'labels'                          => array(
    411414                'name'                  => _x( 'Template Parts', 'post type general name' ),
    412415                'singular_name'         => _x( 'Template Part', 'post type singular name' ),
     
    428431                'items_list'            => __( 'Template parts list' ),
    429432            ),
    430             'description'           => __( 'Template parts to include in your templates.' ),
    431             'public'                => false,
    432             '_builtin'              => true, /* internal use only. don't use this when registering your own post type. */
    433             '_edit_link'            => $template_edit_link, /* internal use only. don't use this when registering your own post type. */
    434             'has_archive'           => false,
    435             'show_ui'               => false,
    436             'show_in_menu'          => false,
    437             'show_in_rest'          => true,
    438             'rewrite'               => false,
    439             'rest_base'             => 'template-parts',
    440             'rest_controller_class' => 'WP_REST_Templates_Controller',
    441             'map_meta_cap'          => true,
    442             'capabilities'          => array(
     433            'description'                     => __( 'Template parts to include in your templates.' ),
     434            'public'                          => false,
     435            '_builtin'                        => true, /* internal use only. don't use this when registering your own post type. */
     436            '_edit_link'                      => $template_edit_link, /* internal use only. don't use this when registering your own post type. */
     437            'has_archive'                     => false,
     438            'show_ui'                         => false,
     439            'show_in_menu'                    => false,
     440            'show_in_rest'                    => true,
     441            'rewrite'                         => false,
     442            'rest_base'                       => 'template-parts',
     443            'rest_controller_class'           => 'WP_REST_Templates_Controller',
     444            'autosave_rest_controller_class'  => 'WP_REST_Template_Autosaves_Controller',
     445            'revisions_rest_controller_class' => 'WP_REST_Template_Revisions_Controller',
     446            'late_route_registration'         => true,
     447            'map_meta_cap'                    => true,
     448            'capabilities'                    => array(
    443449                'create_posts'           => 'edit_theme_options',
    444450                'delete_posts'           => 'edit_theme_options',
     
    454460                'read_private_posts'     => 'edit_theme_options',
    455461            ),
    456             'supports'              => array(
     462            'supports'                        => array(
    457463                'title',
    458464                'slug',
     
    15761582 *     Array or string of arguments for registering a post type.
    15771583 *
    1578  *     @type string       $label                 Name of the post type shown in the menu. Usually plural.
    1579  *                                               Default is value of $labels['name'].
    1580  *     @type string[]     $labels                An array of labels for this post type. If not set, post
    1581  *                                               labels are inherited for non-hierarchical types and page
    1582  *                                               labels for hierarchical ones. See get_post_type_labels() for a full
    1583  *                                               list of supported labels.
    1584  *     @type string       $description           A short descriptive summary of what the post type is.
    1585  *                                               Default empty.
    1586  *     @type bool         $public                Whether a post type is intended for use publicly either via
    1587  *                                               the admin interface or by front-end users. While the default
    1588  *                                               settings of $exclude_from_search, $publicly_queryable, $show_ui,
    1589  *                                               and $show_in_nav_menus are inherited from $public, each does not
    1590  *                                               rely on this relationship and controls a very specific intention.
    1591  *                                               Default false.
    1592  *     @type bool         $hierarchical          Whether the post type is hierarchical (e.g. page). Default false.
    1593  *     @type bool         $exclude_from_search   Whether to exclude posts with this post type from front end search
    1594  *                                               results. Default is the opposite value of $public.
    1595  *     @type bool         $publicly_queryable    Whether queries can be performed on the front end for the post type
    1596  *                                               as part of parse_request(). Endpoints would include:
    1597  *                                               * ?post_type={post_type_key}
    1598  *                                               * ?{post_type_key}={single_post_slug}
    1599  *                                               * ?{post_type_query_var}={single_post_slug}
    1600  *                                               If not set, the default is inherited from $public.
    1601  *     @type bool         $show_ui               Whether to generate and allow a UI for managing this post type in the
    1602  *                                               admin. Default is value of $public.
    1603  *     @type bool|string  $show_in_menu          Where to show the post type in the admin menu. To work, $show_ui
    1604  *                                               must be true. If true, the post type is shown in its own top level
    1605  *                                               menu. If false, no menu is shown. If a string of an existing top
    1606  *                                               level menu ('tools.php' or 'edit.php?post_type=page', for example), the
    1607  *                                               post type will be placed as a sub-menu of that.
    1608  *                                               Default is value of $show_ui.
    1609  *     @type bool         $show_in_nav_menus     Makes this post type available for selection in navigation menus.
    1610  *                                               Default is value of $public.
    1611  *     @type bool         $show_in_admin_bar     Makes this post type available via the admin bar. Default is value
    1612  *                                               of $show_in_menu.
    1613  *     @type bool         $show_in_rest          Whether to include the post type in the REST API. Set this to true
    1614  *                                               for the post type to be available in the block editor.
    1615  *     @type string       $rest_base             To change the base URL of REST API route. Default is $post_type.
    1616  *     @type string       $rest_namespace        To change the namespace URL of REST API route. Default is wp/v2.
    1617  *     @type string       $rest_controller_class REST API controller class name. Default is 'WP_REST_Posts_Controller'.
    1618  *     @type int          $menu_position         The position in the menu order the post type should appear. To work,
    1619  *                                               $show_in_menu must be true. Default null (at the bottom).
    1620  *     @type string       $menu_icon             The URL to the icon to be used for this menu. Pass a base64-encoded
    1621  *                                               SVG using a data URI, which will be colored to match the color scheme
    1622  *                                               -- this should begin with 'data:image/svg+xml;base64,'. Pass the name
    1623  *                                               of a Dashicons helper class to use a font icon, e.g.
    1624  *                                               'dashicons-chart-pie'. Pass 'none' to leave div.wp-menu-image empty
    1625  *                                               so an icon can be added via CSS. Defaults to use the posts icon.
    1626  *     @type string|array $capability_type       The string to use to build the read, edit, and delete capabilities.
    1627  *                                               May be passed as an array to allow for alternative plurals when using
    1628  *                                               this argument as a base to construct the capabilities, e.g.
    1629  *                                               array('story', 'stories'). Default 'post'.
    1630  *     @type string[]     $capabilities          Array of capabilities for this post type. $capability_type is used
    1631  *                                               as a base to construct capabilities by default.
    1632  *                                               See get_post_type_capabilities().
    1633  *     @type bool         $map_meta_cap          Whether to use the internal default meta capability handling.
    1634  *                                               Default false.
    1635  *     @type array        $supports              Core feature(s) the post type supports. Serves as an alias for calling
    1636  *                                               add_post_type_support() directly. Core features include 'title',
    1637  *                                               'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt',
    1638  *                                               'page-attributes', 'thumbnail', 'custom-fields', and 'post-formats'.
    1639  *                                               Additionally, the 'revisions' feature dictates whether the post type
    1640  *                                               will store revisions, and the 'comments' feature dictates whether the
    1641  *                                               comments count will show on the edit screen. A feature can also be
    1642  *                                               specified as an array of arguments to provide additional information
    1643  *                                               about supporting that feature.
    1644  *                                               Example: `array( 'my_feature', array( 'field' => 'value' ) )`.
    1645  *                                               Default is an array containing 'title' and 'editor'.
    1646  *     @type callable     $register_meta_box_cb  Provide a callback function that sets up the meta boxes for the
    1647  *                                               edit form. Do remove_meta_box() and add_meta_box() calls in the
    1648  *                                               callback. Default null.
    1649  *     @type string[]     $taxonomies            An array of taxonomy identifiers that will be registered for the
    1650  *                                               post type. Taxonomies can be registered later with register_taxonomy()
    1651  *                                               or register_taxonomy_for_object_type().
    1652  *                                               Default empty array.
    1653  *     @type bool|string  $has_archive           Whether there should be post type archives, or if a string, the
    1654  *                                               archive slug to use. Will generate the proper rewrite rules if
    1655  *                                               $rewrite is enabled. Default false.
    1656  *     @type bool|array   $rewrite               {
     1584 *     @type string       $label                           Name of the post type shown in the menu. Usually plural.
     1585 *                                                         Default is value of $labels['name'].
     1586 *     @type string[]     $labels                          An array of labels for this post type. If not set, post
     1587 *                                                         labels are inherited for non-hierarchical types and page
     1588 *                                                         labels for hierarchical ones. See get_post_type_labels() for a full
     1589 *                                                         list of supported labels.
     1590 *     @type string       $description                     A short descriptive summary of what the post type is.
     1591 *                                                         Default empty.
     1592 *     @type bool         $public                          Whether a post type is intended for use publicly either via
     1593 *                                                         the admin interface or by front-end users. While the default
     1594 *                                                         settings of $exclude_from_search, $publicly_queryable, $show_ui,
     1595 *                                                         and $show_in_nav_menus are inherited from $public, each does not
     1596 *                                                         rely on this relationship and controls a very specific intention.
     1597 *                                                         Default false.
     1598 *     @type bool         $hierarchical                    Whether the post type is hierarchical (e.g. page). Default false.
     1599 *     @type bool         $exclude_from_search             Whether to exclude posts with this post type from front end search
     1600 *                                                         results. Default is the opposite value of $public.
     1601 *     @type bool         $publicly_queryable              Whether queries can be performed on the front end for the post type
     1602 *                                                         as part of parse_request(). Endpoints would include:
     1603 *                                                          * ?post_type={post_type_key}
     1604 *                                                          * ?{post_type_key}={single_post_slug}
     1605 *                                                          * ?{post_type_query_var}={single_post_slug}
     1606 *                                                         If not set, the default is inherited from $public.
     1607 *     @type bool         $show_ui                         Whether to generate and allow a UI for managing this post type in the
     1608 *                                                         admin. Default is value of $public.
     1609 *     @type bool|string  $show_in_menu                    Where to show the post type in the admin menu. To work, $show_ui
     1610 *                                                         must be true. If true, the post type is shown in its own top level
     1611 *                                                         menu. If false, no menu is shown. If a string of an existing top
     1612 *                                                         level menu ('tools.php' or 'edit.php?post_type=page', for example), the
     1613 *                                                         post type will be placed as a sub-menu of that.
     1614 *                                                         Default is value of $show_ui.
     1615 *     @type bool         $show_in_nav_menus               Makes this post type available for selection in navigation menus.
     1616 *                                                         Default is value of $public.
     1617 *     @type bool         $show_in_admin_bar               Makes this post type available via the admin bar. Default is value
     1618 *                                                         of $show_in_menu.
     1619 *     @type bool         $show_in_rest                    Whether to include the post type in the REST API. Set this to true
     1620 *                                                         for the post type to be available in the block editor.
     1621 *     @type string       $rest_base                       To change the base URL of REST API route. Default is $post_type.
     1622 *     @type string       $rest_namespace                  To change the namespace URL of REST API route. Default is wp/v2.
     1623 *     @type string       $rest_controller_class           REST API controller class name. Default is 'WP_REST_Posts_Controller'.
     1624 *     @type string|bool  $autosave_rest_controller_class  REST API controller class name. Default is 'WP_REST_Autosaves_Controller'.
     1625 *     @type string|bool  $revisions_rest_controller_class REST API controller class name. Default is 'WP_REST_Revisions_Controller'.
     1626 *     @type bool         $late_route_registration         A flag to direct the REST API controllers for autosave / revisions should be registered before/after the post type controller.
     1627 *     @type int          $menu_position                   The position in the menu order the post type should appear. To work,
     1628 *                                                         $show_in_menu must be true. Default null (at the bottom).
     1629 *     @type string       $menu_icon                       The URL to the icon to be used for this menu. Pass a base64-encoded
     1630 *                                                         SVG using a data URI, which will be colored to match the color scheme
     1631 *                                                         -- this should begin with 'data:image/svg+xml;base64,'. Pass the name
     1632 *                                                         of a Dashicons helper class to use a font icon, e.g.
     1633 *                                                        'dashicons-chart-pie'. Pass 'none' to leave div.wp-menu-image empty
     1634 *                                                         so an icon can be added via CSS. Defaults to use the posts icon.
     1635 *     @type string|array $capability_type                 The string to use to build the read, edit, and delete capabilities.
     1636 *                                                         May be passed as an array to allow for alternative plurals when using
     1637 *                                                         this argument as a base to construct the capabilities, e.g.
     1638 *                                                         array('story', 'stories'). Default 'post'.
     1639 *     @type string[]     $capabilities                    Array of capabilities for this post type. $capability_type is used
     1640 *                                                         as a base to construct capabilities by default.
     1641 *                                                         See get_post_type_capabilities().
     1642 *     @type bool         $map_meta_cap                    Whether to use the internal default meta capability handling.
     1643 *                                                         Default false.
     1644 *     @type array        $supports                        Core feature(s) the post type supports. Serves as an alias for calling
     1645 *                                                         add_post_type_support() directly. Core features include 'title',
     1646 *                                                         'editor', 'comments', 'revisions', 'trackbacks', 'author', 'excerpt',
     1647 *                                                         'page-attributes', 'thumbnail', 'custom-fields', and 'post-formats'.
     1648 *                                                         Additionally, the 'revisions' feature dictates whether the post type
     1649 *                                                         will store revisions, and the 'comments' feature dictates whether the
     1650 *                                                         comments count will show on the edit screen. A feature can also be
     1651 *                                                         specified as an array of arguments to provide additional information
     1652 *                                                         about supporting that feature.
     1653 *                                                         Example: `array( 'my_feature', array( 'field' => 'value' ) )`.
     1654 *                                                         Default is an array containing 'title' and 'editor'.
     1655 *     @type callable     $register_meta_box_cb            Provide a callback function that sets up the meta boxes for the
     1656 *                                                         edit form. Do remove_meta_box() and add_meta_box() calls in the
     1657 *                                                         callback. Default null.
     1658 *     @type string[]     $taxonomies                      An array of taxonomy identifiers that will be registered for the
     1659 *                                                         post type. Taxonomies can be registered later with register_taxonomy()
     1660 *                                                         or register_taxonomy_for_object_type().
     1661 *                                                         Default empty array.
     1662 *     @type bool|string  $has_archive                     Whether there should be post type archives, or if a string, the
     1663 *                                                         archive slug to use. Will generate the proper rewrite rules if
     1664 *                                                         $rewrite is enabled. Default false.
     1665 *     @type bool|array   $rewrite                         {
    16571666 *         Triggers the handling of rewrites for this post type. To prevent rewrite, set to false.
    16581667 *         Defaults to true, using $post_type as slug. To specify rewrite rules, an array can be
     
    16691678 *                                  is not set, defaults to EP_PERMALINK.
    16701679 *     }
    1671  *     @type string|bool  $query_var             Sets the query_var key for this post type. Defaults to $post_type
    1672  *                                               key. If false, a post type cannot be loaded at
    1673  *                                               ?{query_var}={post_slug}. If specified as a string, the query
    1674  *                                               ?{query_var_string}={post_slug} will be valid.
    1675  *     @type bool         $can_export            Whether to allow this post type to be exported. Default true.
    1676  *     @type bool         $delete_with_user      Whether to delete posts of this type when deleting a user.
    1677  *                                               * If true, posts of this type belonging to the user will be moved
    1678  *                                                 to Trash when the user is deleted.
    1679  *                                               * If false, posts of this type belonging to the user will *not*
    1680  *                                                 be trashed or deleted.
    1681  *                                               * If not set (the default), posts are trashed if post type supports
    1682  *                                                 the 'author' feature. Otherwise posts are not trashed or deleted.
    1683  *                                               Default null.
    1684  *     @type array        $template              Array of blocks to use as the default initial state for an editor
    1685  *                                               session. Each item should be an array containing block name and
    1686  *                                               optional attributes. Default empty array.
    1687  *     @type string|false $template_lock         Whether the block template should be locked if $template is set.
    1688  *                                               * If set to 'all', the user is unable to insert new blocks,
    1689  *                                                 move existing blocks and delete blocks.
    1690  *                                               * If set to 'insert', the user is able to move existing blocks
    1691  *                                                 but is unable to insert new blocks and delete blocks.
    1692  *                                               Default false.
    1693  *     @type bool         $_builtin              FOR INTERNAL USE ONLY! True if this post type is a native or
    1694  *                                               "built-in" post_type. Default false.
    1695  *     @type string       $_edit_link            FOR INTERNAL USE ONLY! URL segment to use for edit link of
    1696  *                                               this post type. Default 'post.php?post=%d'.
     1680 *     @type string|bool  $query_var                      Sets the query_var key for this post type. Defaults to $post_type
     1681 *                                                        key. If false, a post type cannot be loaded at
     1682 *                                                        ?{query_var}={post_slug}. If specified as a string, the query
     1683 *                                                        ?{query_var_string}={post_slug} will be valid.
     1684 *     @type bool         $can_export                     Whether to allow this post type to be exported. Default true.
     1685 *     @type bool         $delete_with_user               Whether to delete posts of this type when deleting a user.
     1686 *                                                          * If true, posts of this type belonging to the user will be moved
     1687 *                                                            to Trash when the user is deleted.
     1688 *                                                          * If false, posts of this type belonging to the user will *not*
     1689 *                                                            be trashed or deleted.
     1690 *                                                          * If not set (the default), posts are trashed if post type supports
     1691 *                                                            the 'author' feature. Otherwise posts are not trashed or deleted.
     1692 *                                                        Default null.
     1693 *     @type array        $template                       Array of blocks to use as the default initial state for an editor
     1694 *                                                        session. Each item should be an array containing block name and
     1695 *                                                        optional attributes. Default empty array.
     1696 *     @type string|false $template_lock                  Whether the block template should be locked if $template is set.
     1697 *                                                        * If set to 'all', the user is unable to insert new blocks,
     1698 *                                                          move existing blocks and delete blocks.
     1699 *                                                       * If set to 'insert', the user is able to move existing blocks
     1700 *                                                         but is unable to insert new blocks and delete blocks.
     1701 *                                                         Default false.
     1702 *     @type bool         $_builtin                     FOR INTERNAL USE ONLY! True if this post type is a native or
     1703 *                                                      "built-in" post_type. Default false.
     1704 *     @type string       $_edit_link                   FOR INTERNAL USE ONLY! URL segment to use for edit link of
     1705 *                                                      this post type. Default 'post.php?post=%d'.
    16971706 * }
    16981707 * @return WP_Post_Type|WP_Error The registered post type object on success,
  • trunk/src/wp-includes/rest-api.php

    r56767 r56819  
    242242        }
    243243
    244         $controller->register_routes();
    245 
    246         if ( post_type_supports( $post_type->name, 'revisions' ) ) {
    247             $revisions_controller = new WP_REST_Revisions_Controller( $post_type->name );
     244        if ( ! $post_type->late_route_registration ) {
     245            $controller->register_routes();
     246        }
     247
     248        $revisions_controller = $post_type->get_revisions_rest_controller();
     249        if ( $revisions_controller ) {
    248250            $revisions_controller->register_routes();
    249251        }
    250252
    251         if ( 'attachment' !== $post_type->name ) {
    252             $autosaves_controller = new WP_REST_Autosaves_Controller( $post_type->name );
     253        $autosaves_controller = $post_type->get_autosave_rest_controller();
     254        if ( $autosaves_controller ) {
    253255            $autosaves_controller->register_routes();
     256        }
     257
     258        if ( $post_type->late_route_registration ) {
     259            $controller->register_routes();
    254260        }
    255261    }
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php

    r56745 r56819  
    6666        }
    6767
    68         $this->parent_controller    = $parent_controller;
    69         $this->revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
     68        $this->parent_controller = $parent_controller;
     69
     70        $revisions_controller = $post_type_object->get_revisions_rest_controller();
     71        if ( ! $revisions_controller ) {
     72            $revisions_controller = new WP_REST_Revisions_Controller( $parent_post_type );
     73        }
     74        $this->revisions_controller = $revisions_controller;
    7075        $this->rest_base            = 'autosaves';
    7176        $this->parent_base          = ! empty( $post_type_object->rest_base ) ? $post_type_object->rest_base : $post_type_object->name;
     
    206211    public function create_item( $request ) {
    207212
    208         if ( ! defined( 'DOING_AUTOSAVE' ) ) {
     213        if ( ! defined( 'WP_RUN_CORE_TESTS' ) && ! defined( 'DOING_AUTOSAVE' ) ) {
    209214            define( 'DOING_AUTOSAVE', true );
    210215        }
    211216
    212         $post = get_post( $request['id'] );
     217        $post = $this->get_parent( $request['id'] );
    213218
    214219        if ( is_wp_error( $post ) ) {
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-templates-controller.php

    r56753 r56819  
    761761        $links = array(
    762762            'self'       => array(
    763                 'href' => rest_url( rest_get_route_for_post( $id ) ),
     763                'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->rest_base, $id ) ),
    764764            ),
    765765            'collection' => array(
     
    770770            ),
    771771        );
     772
     773        if ( post_type_supports( $this->post_type, 'revisions' ) ) {
     774            $template = get_block_template( $id, $this->post_type );
     775            if ( $template instanceof WP_Block_Template && ! empty( $template->wp_id ) ) {
     776                $revisions       = wp_get_latest_revision_id_and_total_count( $template->wp_id );
     777                $revisions_count = ! is_wp_error( $revisions ) ? $revisions['count'] : 0;
     778                $revisions_base  = sprintf( '/%s/%s/%s/revisions', $this->namespace, $this->rest_base, $id );
     779
     780                $links['version-history'] = array(
     781                    'href'  => rest_url( $revisions_base ),
     782                    'count' => $revisions_count,
     783                );
     784
     785                if ( $revisions_count > 0 ) {
     786                    $links['predecessor-version'] = array(
     787                        'href' => rest_url( $revisions_base . '/' . $revisions['latest_id'] ),
     788                        'id'   => $revisions['latest_id'],
     789                    );
     790                }
     791            }
     792        }
    772793
    773794        return $links;
  • trunk/src/wp-settings.php

    r56793 r56819  
    274274require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-post-statuses-controller.php';
    275275require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-revisions-controller.php';
     276require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-template-revisions-controller.php';
    276277require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-autosaves-controller.php';
     278require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php';
    277279require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-taxonomies-controller.php';
    278280require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-terms-controller.php';
  • trunk/tests/phpunit/tests/post/wpPostType.php

    r53126 r56819  
    230230        $this->assertSame( 3, $action->get_call_count() );
    231231    }
     232
     233    /**
     234     * @ticket 56922
     235     *
     236     * @dataProvider data_should_have_correct_custom_revisions_and_autosaves_controllers_properties
     237     *
     238     * @covers WP_Post_Type::set_props
     239     *
     240     * @param string      $property_name           Property name.
     241     * @param string      $property_value          Property value.
     242     * @param string|bool $expected_property_value Expected property value.
     243     */
     244    public function test_should_have_correct_custom_revisions_and_autosaves_controllers_properties( $property_name, $property_value, $expected_property_value ) {
     245        $properties = null === $property_value ? array() : array( $property_name => $property_value );
     246
     247        $post_type = new WP_Post_Type( 'test_post_type', $properties );
     248
     249        $this->assertObjectHasProperty( $property_name, $post_type, "The WP_Post_Type object does not have the expected {$property_name} property." );
     250        $this->assertSame(
     251            $expected_property_value,
     252            $post_type->$property_name,
     253            sprintf( 'Expected the property "%s" to have the %s value.', $property_name, var_export( $expected_property_value, true ) )
     254        );
     255    }
     256
     257    /**
     258     * Data provider for test_should_allow_to_set_custom_revisions_and_autosaves_controllers_properties.
     259     *
     260     * @return array[] Arguments {
     261     *     @type string $property_name           Property name.
     262     *     @type string $property_value          Property value.
     263     *     @type string|bool $expected_property_value Expected property value.
     264     * }
     265     */
     266    public function data_should_have_correct_custom_revisions_and_autosaves_controllers_properties() {
     267        return array(
     268            'autosave_rest_controller_class property'  => array(
     269                'autosave_rest_controller_class',
     270                'My_Custom_Template_Autosaves_Controller',
     271                'My_Custom_Template_Autosaves_Controller',
     272            ),
     273            'autosave_rest_controller_class property (null value)' => array(
     274                'autosave_rest_controller_class',
     275                null,
     276                false,
     277            ),
     278            'revisions_rest_controller_class property' => array(
     279                'revisions_rest_controller_class',
     280                'My_Custom_Template_Revisions_Controller',
     281                'My_Custom_Template_Revisions_Controller',
     282            ),
     283            'revisions_rest_controller_class property (null value)' => array(
     284                'revisions_rest_controller_class',
     285                null,
     286                false,
     287            ),
     288        );
     289    }
     290
     291    /**
     292     * @ticket 56922
     293     *
     294     * @covers WP_Post_Type::get_revisions_rest_controller
     295     *
     296     * @dataProvider data_get_revisions_rest_controller_should_return_correct_values
     297     *
     298     * @param bool        $show_in_rest                    Enables "show_in_rest" support.
     299     * @param bool        $supports_revisions              Enables revisions support.
     300     * @param string|bool $revisions_rest_controller_class Custom revisions REST controller class.
     301     * @param string|null $expected_value                  Expected value.
     302     */
     303    public function test_get_revisions_rest_controller_should_return_correct_values( $show_in_rest, $supports_revisions, $revisions_rest_controller_class, $expected_value ) {
     304        $post_type  = 'test_post_type';
     305        $properties = array(
     306            'show_in_rest'                    => $show_in_rest,
     307            'supports'                        => $supports_revisions ? array( 'revisions' ) : array(),
     308            'revisions_rest_controller_class' => $revisions_rest_controller_class,
     309        );
     310        register_post_type( $post_type, $properties );
     311        $post_type = get_post_type_object( $post_type );
     312
     313        $controller = $post_type->get_revisions_rest_controller();
     314        if ( $expected_value ) {
     315            $this->assertInstanceOf( $expected_value, $controller );
     316
     317            return;
     318        }
     319
     320        $this->assertSame( $expected_value, $controller );
     321    }
     322
     323    /**
     324     * Data provider for test_get_revisions_rest_controller_should_return_correct_values.
     325     *
     326     * @return array[] Arguments {
     327     *     @type bool             $show_in_rest                    Enables "show_in_rest" support.
     328     *     @type bool             $supports_revisions              Enables revisions support.
     329     *     @type string|bool      $revisions_rest_controller_class Custom revisions REST controller class.
     330     *     @type string|null      $expected_value                  Expected value.
     331     * }
     332     */
     333    public function data_get_revisions_rest_controller_should_return_correct_values() {
     334        return array(
     335            'disable show_in_rest'                => array(
     336                false,
     337                false,
     338                false,
     339                null,
     340            ),
     341            'disable revisions support'           => array(
     342                true,
     343                false,
     344                false,
     345                null,
     346            ),
     347            'default rest revisions controller'   => array(
     348                true,
     349                true,
     350                false,
     351                WP_REST_Revisions_Controller::class,
     352            ),
     353            'incorrect rest revisions controller' => array(
     354                true,
     355                true,
     356                stdClass::class,
     357                null,
     358            ),
     359            'correct rest revisions controller'   => array(
     360                true,
     361                true,
     362                WP_REST_Template_Revisions_Controller::class,
     363                WP_REST_Template_Revisions_Controller::class,
     364            ),
     365        );
     366    }
     367
     368    /**
     369     * @ticket 56922
     370     *
     371     * @covers WP_Post_Type::get_autosave_rest_controller
     372     *
     373     * @dataProvider data_get_autosave_rest_controller_should_return_correct_values
     374     *
     375     * @param bool        $show_in_rest                   Enables "show_in_rest" support.
     376     * @param string      $post_type                      Post type.
     377     * @param string|bool $autosave_rest_controller_class Custom autosave REST controller class.
     378     * @param string|null $expected_value                 Expected value.
     379     */
     380    public function test_get_autosave_rest_controller_should_return_correct_values( $show_in_rest, $post_type, $autosave_rest_controller_class, $expected_value ) {
     381        $properties = array(
     382            'show_in_rest'                   => $show_in_rest,
     383            'autosave_rest_controller_class' => $autosave_rest_controller_class,
     384        );
     385        register_post_type( $post_type, $properties );
     386        $post_type = get_post_type_object( $post_type );
     387
     388        $controller = $post_type->get_autosave_rest_controller();
     389        if ( $expected_value ) {
     390            $this->assertInstanceOf( $expected_value, $controller );
     391
     392            return;
     393        }
     394
     395        $this->assertSame( $expected_value, $controller );
     396    }
     397
     398    /**
     399     * Data provider for test_get_autosave_rest_controller_should_return_correct_values.
     400     *
     401     * @return array[] Arguments {
     402     *     @type bool        $show_in_rest                   Enables "show_in_rest" support.
     403     *     @type string      $post_type                      Post type.
     404     *     @type string|bool $autosave_rest_controller_class Custom autosave REST controller class.
     405     *     @type string|null $expected_value                 Expected value.
     406     * }
     407     */
     408    public function data_get_autosave_rest_controller_should_return_correct_values() {
     409        return array(
     410            'disable show_in_rest'               => array(
     411                false,
     412                'attachment',
     413                false,
     414                null,
     415            ),
     416            'invalid post type'                  => array(
     417                true,
     418                'attachment',
     419                false,
     420                null,
     421            ),
     422            'default rest autosave controller'   => array(
     423                true,
     424                'test_post_type',
     425                false,
     426                WP_REST_Autosaves_Controller::class,
     427            ),
     428            'incorrect rest autosave controller' => array(
     429                true,
     430                'test_post_type',
     431                stdClass::class,
     432                null,
     433            ),
     434            'correct rest autosave controller'   => array(
     435                true,
     436                'test_post_type',
     437                WP_REST_Template_Autosaves_Controller::class,
     438                WP_REST_Template_Autosaves_Controller::class,
     439            ),
     440        );
     441    }
    232442}
  • trunk/tests/phpunit/tests/rest-api/rest-schema-setup.php

    r56642 r56819  
    145145            '/wp/v2/settings',
    146146            '/wp/v2/template-parts',
    147             '/wp/v2/template-parts/(?P<id>[\d]+)/autosaves',
    148147            '/wp/v2/template-parts/(?P<id>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)',
    149             '/wp/v2/template-parts/(?P<parent>[\d]+)/autosaves/(?P<id>[\d]+)',
    150             '/wp/v2/template-parts/(?P<parent>[\d]+)/revisions',
    151             '/wp/v2/template-parts/(?P<parent>[\d]+)/revisions/(?P<id>[\d]+)',
     148            '/wp/v2/template-parts/(?P<id>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/autosaves',
     149            '/wp/v2/template-parts/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/autosaves/(?P<id>[\d]+)',
     150            '/wp/v2/template-parts/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/revisions',
     151            '/wp/v2/template-parts/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/revisions/(?P<id>[\d]+)',
    152152            '/wp/v2/template-parts/lookup',
    153153            '/wp/v2/templates',
    154             '/wp/v2/templates/(?P<id>[\d]+)/autosaves',
    155154            '/wp/v2/templates/(?P<id>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)',
    156             '/wp/v2/templates/(?P<parent>[\d]+)/autosaves/(?P<id>[\d]+)',
    157             '/wp/v2/templates/(?P<parent>[\d]+)/revisions',
    158             '/wp/v2/templates/(?P<parent>[\d]+)/revisions/(?P<id>[\d]+)',
     155            '/wp/v2/templates/(?P<id>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/autosaves',
     156            '/wp/v2/templates/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/autosaves/(?P<id>[\d]+)',
     157            '/wp/v2/templates/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/revisions',
     158            '/wp/v2/templates/(?P<parent>([^\/:<>\*\?"\|]+(?:\/[^\/:<>\*\?"\|]+)?)[\/\w%-]+)/revisions/(?P<id>[\d]+)',
    159159            '/wp/v2/templates/lookup',
    160160            '/wp/v2/themes',
  • trunk/tests/qunit/fixtures/wp-api-generated.js

    r56714 r56819  
    26732673        },
    26742674        "/wp/v2/pages/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+)": {
     2675            "namespace": "wp/v2",
     2676            "methods": [
     2677                "GET"
     2678            ],
     2679            "endpoints": [
     2680                {
     2681                    "methods": [
     2682                        "GET"
     2683                    ],
     2684                    "args": {
     2685                        "parent": {
     2686                            "description": "The ID for the parent of the autosave.",
     2687                            "type": "integer",
     2688                            "required": false
     2689                        },
     2690                        "id": {
     2691                            "description": "The ID for the autosave.",
     2692                            "type": "integer",
     2693                            "required": false
     2694                        },
     2695                        "context": {
     2696                            "description": "Scope under which the request is made; determines fields present in response.",
     2697                            "type": "string",
     2698                            "enum": [
     2699                                "view",
     2700                                "embed",
     2701                                "edit"
     2702                            ],
     2703                            "default": "view",
     2704                            "required": false
     2705                        }
     2706                    }
     2707                }
     2708            ]
     2709        },
     2710        "/wp/v2/menu-items": {
     2711            "namespace": "wp/v2",
     2712            "methods": [
     2713                "GET",
     2714                "POST"
     2715            ],
     2716            "endpoints": [
     2717                {
     2718                    "methods": [
     2719                        "GET"
     2720                    ],
     2721                    "allow_batch": {
     2722                        "v1": true
     2723                    },
     2724                    "args": {
     2725                        "context": {
     2726                            "description": "Scope under which the request is made; determines fields present in response.",
     2727                            "type": "string",
     2728                            "enum": [
     2729                                "view",
     2730                                "embed",
     2731                                "edit"
     2732                            ],
     2733                            "default": "view",
     2734                            "required": false
     2735                        },
     2736                        "page": {
     2737                            "description": "Current page of the collection.",
     2738                            "type": "integer",
     2739                            "default": 1,
     2740                            "minimum": 1,
     2741                            "required": false
     2742                        },
     2743                        "per_page": {
     2744                            "description": "Maximum number of items to be returned in result set.",
     2745                            "type": "integer",
     2746                            "default": 100,
     2747                            "minimum": 1,
     2748                            "maximum": 100,
     2749                            "required": false
     2750                        },
     2751                        "search": {
     2752                            "description": "Limit results to those matching a string.",
     2753                            "type": "string",
     2754                            "required": false
     2755                        },
     2756                        "after": {
     2757                            "description": "Limit response to posts published after a given ISO8601 compliant date.",
     2758                            "type": "string",
     2759                            "format": "date-time",
     2760                            "required": false
     2761                        },
     2762                        "modified_after": {
     2763                            "description": "Limit response to posts modified after a given ISO8601 compliant date.",
     2764                            "type": "string",
     2765                            "format": "date-time",
     2766                            "required": false
     2767                        },
     2768                        "before": {
     2769                            "description": "Limit response to posts published before a given ISO8601 compliant date.",
     2770                            "type": "string",
     2771                            "format": "date-time",
     2772                            "required": false
     2773                        },
     2774                        "modified_before": {
     2775                            "description": "Limit response to posts modified before a given ISO8601 compliant date.",
     2776                            "type": "string",
     2777                            "format": "date-time",
     2778                            "required": false
     2779                        },
     2780                        "exclude": {
     2781                            "description": "Ensure result set excludes specific IDs.",
     2782                            "type": "array",
     2783                            "items": {
     2784                                "type": "integer"
     2785                            },
     2786                            "default": [],
     2787                            "required": false
     2788                        },
     2789                        "include": {
     2790                            "description": "Limit result set to specific IDs.",
     2791                            "type": "array",
     2792                            "items": {
     2793                                "type": "integer"
     2794                            },
     2795                            "default": [],
     2796                            "required": false
     2797                        },
     2798                        "offset": {
     2799                            "description": "Offset the result set by a specific number of items.",
     2800                            "type": "integer",
     2801                            "required": false
     2802                        },
     2803                        "order": {
     2804                            "description": "Order sort attribute ascending or descending.",
     2805                            "type": "string",
     2806                            "default": "asc",
     2807                            "enum": [
     2808                                "asc",
     2809                                "desc"
     2810                            ],
     2811                            "required": false
     2812                        },
     2813                        "orderby": {
     2814                            "description": "Sort collection by object attribute.",
     2815                            "type": "string",
     2816                            "default": "menu_order",
     2817                            "enum": [
     2818                                "author",
     2819                                "date",
     2820                                "id",
     2821                                "include",
     2822                                "modified",
     2823                                "parent",
     2824                                "relevance",
     2825                                "slug",
     2826                                "include_slugs",
     2827                                "title",
     2828                                "menu_order"
     2829                            ],
     2830                            "required": false
     2831                        },
     2832                        "search_columns": {
     2833                            "default": [],
     2834                            "description": "Array of column names to be searched.",
     2835                            "type": "array",
     2836                            "items": {
     2837                                "enum": [
     2838                                    "post_title",
     2839                                    "post_content",
     2840                                    "post_excerpt"
     2841                                ],
     2842                                "type": "string"
     2843                            },
     2844                            "required": false
     2845                        },
     2846                        "slug": {
     2847                            "description": "Limit result set to posts with one or more specific slugs.",
     2848                            "type": "array",
     2849                            "items": {
     2850                                "type": "string"
     2851                            },
     2852                            "required": false
     2853                        },
     2854                        "status": {
     2855                            "default": "publish",
     2856                            "description": "Limit result set to posts assigned one or more statuses.",
     2857                            "type": "array",
     2858                            "items": {
     2859                                "enum": [
     2860                                    "publish",
     2861                                    "future",
     2862                                    "draft",
     2863                                    "pending",
     2864                                    "private",
     2865                                    "trash",
     2866                                    "auto-draft",
     2867                                    "inherit",
     2868                                    "request-pending",
     2869                                    "request-confirmed",
     2870                                    "request-failed",
     2871                                    "request-completed",
     2872                                    "any"
     2873                                ],
     2874                                "type": "string"
     2875                            },
     2876                            "required": false
     2877                        },
     2878                        "tax_relation": {
     2879                            "description": "Limit result set based on relationship between multiple taxonomies.",
     2880                            "type": "string",
     2881                            "enum": [
     2882                                "AND",
     2883                                "OR"
     2884                            ],
     2885                            "required": false
     2886                        },
     2887                        "menus": {
     2888                            "description": "Limit result set to items with specific terms assigned in the menus taxonomy.",
     2889                            "type": [
     2890                                "object",
     2891                                "array"
     2892                            ],
     2893                            "oneOf": [
     2894                                {
     2895                                    "title": "Term ID List",
     2896                                    "description": "Match terms with the listed IDs.",
     2897                                    "type": "array",
     2898                                    "items": {
     2899                                        "type": "integer"
     2900                                    }
     2901                                },
     2902                                {
     2903                                    "title": "Term ID Taxonomy Query",
     2904                                    "description": "Perform an advanced term query.",
     2905                                    "type": "object",
     2906                                    "properties": {
     2907                                        "terms": {
     2908                                            "description": "Term IDs.",
     2909                                            "type": "array",
     2910                                            "items": {
     2911                                                "type": "integer"
     2912                                            },
     2913                                            "default": []
     2914                                        },
     2915                                        "operator": {
     2916                                            "description": "Whether items must be assigned all or any of the specified terms.",
     2917                                            "type": "string",
     2918                                            "enum": [
     2919                                                "AND",
     2920                                                "OR"
     2921                                            ],
     2922                                            "default": "OR"
     2923                                        }
     2924                                    },
     2925                                    "additionalProperties": false
     2926                                }
     2927                            ],
     2928                            "required": false
     2929                        },
     2930                        "menus_exclude": {
     2931                            "description": "Limit result set to items except those with specific terms assigned in the menus taxonomy.",
     2932                            "type": [
     2933                                "object",
     2934                                "array"
     2935                            ],
     2936                            "oneOf": [
     2937                                {
     2938                                    "title": "Term ID List",
     2939                                    "description": "Match terms with the listed IDs.",
     2940                                    "type": "array",
     2941                                    "items": {
     2942                                        "type": "integer"
     2943                                    }
     2944                                },
     2945                                {
     2946                                    "title": "Term ID Taxonomy Query",
     2947                                    "description": "Perform an advanced term query.",
     2948                                    "type": "object",
     2949                                    "properties": {
     2950                                        "terms": {
     2951                                            "description": "Term IDs.",
     2952                                            "type": "array",
     2953                                            "items": {
     2954                                                "type": "integer"
     2955                                            },
     2956                                            "default": []
     2957                                        }
     2958                                    },
     2959                                    "additionalProperties": false
     2960                                }
     2961                            ],
     2962                            "required": false
     2963                        },
     2964                        "menu_order": {
     2965                            "description": "Limit result set to posts with a specific menu_order value.",
     2966                            "type": "integer",
     2967                            "required": false
     2968                        }
     2969                    }
     2970                },
     2971                {
     2972                    "methods": [
     2973                        "POST"
     2974                    ],
     2975                    "allow_batch": {
     2976                        "v1": true
     2977                    },
     2978                    "args": {
     2979                        "title": {
     2980                            "description": "The title for the object.",
     2981                            "type": [
     2982                                "string",
     2983                                "object"
     2984                            ],
     2985                            "properties": {
     2986                                "raw": {
     2987                                    "description": "Title for the object, as it exists in the database.",
     2988                                    "type": "string",
     2989                                    "context": [
     2990                                        "edit"
     2991                                    ]
     2992                                },
     2993                                "rendered": {
     2994                                    "description": "HTML title for the object, transformed for display.",
     2995                                    "type": "string",
     2996                                    "context": [
     2997                                        "view",
     2998                                        "edit",
     2999                                        "embed"
     3000                                    ],
     3001                                    "readonly": true
     3002                                }
     3003                            },
     3004                            "required": false
     3005                        },
     3006                        "type": {
     3007                            "default": "custom",
     3008                            "description": "The family of objects originally represented, such as \"post_type\" or \"taxonomy\".",
     3009                            "type": "string",
     3010                            "enum": [
     3011                                "taxonomy",
     3012                                "post_type",
     3013                                "post_type_archive",
     3014                                "custom"
     3015                            ],
     3016                            "required": false
     3017                        },
     3018                        "status": {
     3019                            "default": "publish",
     3020                            "description": "A named status for the object.",
     3021                            "type": "string",
     3022                            "enum": [
     3023                                "publish",
     3024                                "future",
     3025                                "draft",
     3026                                "pending",
     3027                                "private"
     3028                            ],
     3029                            "required": false
     3030                        },
     3031                        "parent": {
     3032                            "default": 0,
     3033                            "description": "The ID for the parent of the object.",
     3034                            "type": "integer",
     3035                            "minimum": 0,
     3036                            "required": false
     3037                        },
     3038                        "attr_title": {
     3039                            "description": "Text for the title attribute of the link element for this menu item.",
     3040                            "type": "string",
     3041                            "required": false
     3042                        },
     3043                        "classes": {
     3044                            "description": "Class names for the link element of this menu item.",
     3045                            "type": "array",
     3046                            "items": {
     3047                                "type": "string"
     3048                            },
     3049                            "required": false
     3050                        },
     3051                        "description": {
     3052                            "description": "The description of this menu item.",
     3053                            "type": "string",
     3054                            "required": false
     3055                        },
     3056                        "menu_order": {
     3057                            "default": 1,
     3058                            "description": "The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0.",
     3059                            "type": "integer",
     3060                            "minimum": 1,
     3061                            "required": false
     3062                        },
     3063                        "object": {
     3064                            "description": "The type of object originally represented, such as \"category\", \"post\", or \"attachment\".",
     3065                            "type": "string",
     3066                            "required": false
     3067                        },
     3068                        "object_id": {
     3069                            "default": 0,
     3070                            "description": "The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.",
     3071                            "type": "integer",
     3072                            "minimum": 0,
     3073                            "required": false
     3074                        },
     3075                        "target": {
     3076                            "description": "The target attribute of the link element for this menu item.",
     3077                            "type": "string",
     3078                            "enum": [
     3079                                "_blank",
     3080                                ""
     3081                            ],
     3082                            "required": false
     3083                        },
     3084                        "url": {
     3085                            "description": "The URL to which this menu item points.",
     3086                            "type": "string",
     3087                            "format": "uri",
     3088                            "required": false
     3089                        },
     3090                        "xfn": {
     3091                            "description": "The XFN relationship expressed in the link of this menu item.",
     3092                            "type": "array",
     3093                            "items": {
     3094                                "type": "string"
     3095                            },
     3096                            "required": false
     3097                        },
     3098                        "menus": {
     3099                            "description": "The terms assigned to the object in the nav_menu taxonomy.",
     3100                            "type": "integer",
     3101                            "required": false
     3102                        },
     3103                        "meta": {
     3104                            "description": "Meta fields.",
     3105                            "type": "object",
     3106                            "properties": [],
     3107                            "required": false
     3108                        }
     3109                    }
     3110                }
     3111            ],
     3112            "_links": {
     3113                "self": [
     3114                    {
     3115                        "href": "http://example.org/index.php?rest_route=/wp/v2/menu-items"
     3116                    }
     3117                ]
     3118            }
     3119        },
     3120        "/wp/v2/menu-items/(?P<id>[\\d]+)": {
     3121            "namespace": "wp/v2",
     3122            "methods": [
     3123                "GET",
     3124                "POST",
     3125                "PUT",
     3126                "PATCH",
     3127                "DELETE"
     3128            ],
     3129            "endpoints": [
     3130                {
     3131                    "methods": [
     3132                        "GET"
     3133                    ],
     3134                    "allow_batch": {
     3135                        "v1": true
     3136                    },
     3137                    "args": {
     3138                        "id": {
     3139                            "description": "Unique identifier for the post.",
     3140                            "type": "integer",
     3141                            "required": false
     3142                        },
     3143                        "context": {
     3144                            "description": "Scope under which the request is made; determines fields present in response.",
     3145                            "type": "string",
     3146                            "enum": [
     3147                                "view",
     3148                                "embed",
     3149                                "edit"
     3150                            ],
     3151                            "default": "view",
     3152                            "required": false
     3153                        }
     3154                    }
     3155                },
     3156                {
     3157                    "methods": [
     3158                        "POST",
     3159                        "PUT",
     3160                        "PATCH"
     3161                    ],
     3162                    "allow_batch": {
     3163                        "v1": true
     3164                    },
     3165                    "args": {
     3166                        "id": {
     3167                            "description": "Unique identifier for the post.",
     3168                            "type": "integer",
     3169                            "required": false
     3170                        },
     3171                        "title": {
     3172                            "description": "The title for the object.",
     3173                            "type": [
     3174                                "string",
     3175                                "object"
     3176                            ],
     3177                            "properties": {
     3178                                "raw": {
     3179                                    "description": "Title for the object, as it exists in the database.",
     3180                                    "type": "string",
     3181                                    "context": [
     3182                                        "edit"
     3183                                    ]
     3184                                },
     3185                                "rendered": {
     3186                                    "description": "HTML title for the object, transformed for display.",
     3187                                    "type": "string",
     3188                                    "context": [
     3189                                        "view",
     3190                                        "edit",
     3191                                        "embed"
     3192                                    ],
     3193                                    "readonly": true
     3194                                }
     3195                            },
     3196                            "required": false
     3197                        },
     3198                        "type": {
     3199                            "description": "The family of objects originally represented, such as \"post_type\" or \"taxonomy\".",
     3200                            "type": "string",
     3201                            "enum": [
     3202                                "taxonomy",
     3203                                "post_type",
     3204                                "post_type_archive",
     3205                                "custom"
     3206                            ],
     3207                            "required": false
     3208                        },
     3209                        "status": {
     3210                            "description": "A named status for the object.",
     3211                            "type": "string",
     3212                            "enum": [
     3213                                "publish",
     3214                                "future",
     3215                                "draft",
     3216                                "pending",
     3217                                "private"
     3218                            ],
     3219                            "required": false
     3220                        },
     3221                        "parent": {
     3222                            "description": "The ID for the parent of the object.",
     3223                            "type": "integer",
     3224                            "minimum": 0,
     3225                            "required": false
     3226                        },
     3227                        "attr_title": {
     3228                            "description": "Text for the title attribute of the link element for this menu item.",
     3229                            "type": "string",
     3230                            "required": false
     3231                        },
     3232                        "classes": {
     3233                            "description": "Class names for the link element of this menu item.",
     3234                            "type": "array",
     3235                            "items": {
     3236                                "type": "string"
     3237                            },
     3238                            "required": false
     3239                        },
     3240                        "description": {
     3241                            "description": "The description of this menu item.",
     3242                            "type": "string",
     3243                            "required": false
     3244                        },
     3245                        "menu_order": {
     3246                            "description": "The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0.",
     3247                            "type": "integer",
     3248                            "minimum": 1,
     3249                            "required": false
     3250                        },
     3251                        "object": {
     3252                            "description": "The type of object originally represented, such as \"category\", \"post\", or \"attachment\".",
     3253                            "type": "string",
     3254                            "required": false
     3255                        },
     3256                        "object_id": {
     3257                            "description": "The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.",
     3258                            "type": "integer",
     3259                            "minimum": 0,
     3260                            "required": false
     3261                        },
     3262                        "target": {
     3263                            "description": "The target attribute of the link element for this menu item.",
     3264                            "type": "string",
     3265                            "enum": [
     3266                                "_blank",
     3267                                ""
     3268                            ],
     3269                            "required": false
     3270                        },
     3271                        "url": {
     3272                            "description": "The URL to which this menu item points.",
     3273                            "type": "string",
     3274                            "format": "uri",
     3275                            "required": false
     3276                        },
     3277                        "xfn": {
     3278                            "description": "The XFN relationship expressed in the link of this menu item.",
     3279                            "type": "array",
     3280                            "items": {
     3281                                "type": "string"
     3282                            },
     3283                            "required": false
     3284                        },
     3285                        "menus": {
     3286                            "description": "The terms assigned to the object in the nav_menu taxonomy.",
     3287                            "type": "integer",
     3288                            "required": false
     3289                        },
     3290                        "meta": {
     3291                            "description": "Meta fields.",
     3292                            "type": "object",
     3293                            "properties": [],
     3294                            "required": false
     3295                        }
     3296                    }
     3297                },
     3298                {
     3299                    "methods": [
     3300                        "DELETE"
     3301                    ],
     3302                    "allow_batch": {
     3303                        "v1": true
     3304                    },
     3305                    "args": {
     3306                        "id": {
     3307                            "description": "Unique identifier for the post.",
     3308                            "type": "integer",
     3309                            "required": false
     3310                        },
     3311                        "force": {
     3312                            "type": "boolean",
     3313                            "default": false,
     3314                            "description": "Whether to bypass Trash and force deletion.",
     3315                            "required": false
     3316                        }
     3317                    }
     3318                }
     3319            ]
     3320        },
     3321        "/wp/v2/menu-items/(?P<id>[\\d]+)/autosaves": {
     3322            "namespace": "wp/v2",
     3323            "methods": [
     3324                "GET",
     3325                "POST"
     3326            ],
     3327            "endpoints": [
     3328                {
     3329                    "methods": [
     3330                        "GET"
     3331                    ],
     3332                    "args": {
     3333                        "parent": {
     3334                            "description": "The ID for the parent of the autosave.",
     3335                            "type": "integer",
     3336                            "required": false
     3337                        },
     3338                        "context": {
     3339                            "description": "Scope under which the request is made; determines fields present in response.",
     3340                            "type": "string",
     3341                            "enum": [
     3342                                "view",
     3343                                "embed",
     3344                                "edit"
     3345                            ],
     3346                            "default": "view",
     3347                            "required": false
     3348                        }
     3349                    }
     3350                },
     3351                {
     3352                    "methods": [
     3353                        "POST"
     3354                    ],
     3355                    "args": {
     3356                        "parent": {
     3357                            "description": "The ID for the parent of the object.",
     3358                            "type": "integer",
     3359                            "minimum": 0,
     3360                            "required": false
     3361                        },
     3362                        "title": {
     3363                            "description": "The title for the object.",
     3364                            "type": [
     3365                                "string",
     3366                                "object"
     3367                            ],
     3368                            "properties": {
     3369                                "raw": {
     3370                                    "description": "Title for the object, as it exists in the database.",
     3371                                    "type": "string",
     3372                                    "context": [
     3373                                        "edit"
     3374                                    ]
     3375                                },
     3376                                "rendered": {
     3377                                    "description": "HTML title for the object, transformed for display.",
     3378                                    "type": "string",
     3379                                    "context": [
     3380                                        "view",
     3381                                        "edit",
     3382                                        "embed"
     3383                                    ],
     3384                                    "readonly": true
     3385                                }
     3386                            },
     3387                            "required": false
     3388                        },
     3389                        "type": {
     3390                            "description": "The family of objects originally represented, such as \"post_type\" or \"taxonomy\".",
     3391                            "type": "string",
     3392                            "enum": [
     3393                                "taxonomy",
     3394                                "post_type",
     3395                                "post_type_archive",
     3396                                "custom"
     3397                            ],
     3398                            "required": false
     3399                        },
     3400                        "status": {
     3401                            "description": "A named status for the object.",
     3402                            "type": "string",
     3403                            "enum": [
     3404                                "publish",
     3405                                "future",
     3406                                "draft",
     3407                                "pending",
     3408                                "private"
     3409                            ],
     3410                            "required": false
     3411                        },
     3412                        "attr_title": {
     3413                            "description": "Text for the title attribute of the link element for this menu item.",
     3414                            "type": "string",
     3415                            "required": false
     3416                        },
     3417                        "classes": {
     3418                            "description": "Class names for the link element of this menu item.",
     3419                            "type": "array",
     3420                            "items": {
     3421                                "type": "string"
     3422                            },
     3423                            "required": false
     3424                        },
     3425                        "description": {
     3426                            "description": "The description of this menu item.",
     3427                            "type": "string",
     3428                            "required": false
     3429                        },
     3430                        "menu_order": {
     3431                            "description": "The DB ID of the nav_menu_item that is this item's menu parent, if any, otherwise 0.",
     3432                            "type": "integer",
     3433                            "minimum": 1,
     3434                            "required": false
     3435                        },
     3436                        "object": {
     3437                            "description": "The type of object originally represented, such as \"category\", \"post\", or \"attachment\".",
     3438                            "type": "string",
     3439                            "required": false
     3440                        },
     3441                        "object_id": {
     3442                            "description": "The database ID of the original object this menu item represents, for example the ID for posts or the term_id for categories.",
     3443                            "type": "integer",
     3444                            "minimum": 0,
     3445                            "required": false
     3446                        },
     3447                        "target": {
     3448                            "description": "The target attribute of the link element for this menu item.",
     3449                            "type": "string",
     3450                            "enum": [
     3451                                "_blank",
     3452                                ""
     3453                            ],
     3454                            "required": false
     3455                        },
     3456                        "url": {
     3457                            "description": "The URL to which this menu item points.",
     3458                            "type": "string",
     3459                            "format": "uri",
     3460                            "required": false
     3461                        },
     3462                        "xfn": {
     3463                            "description": "The XFN relationship expressed in the link of this menu item.",
     3464                            "type": "array",
     3465                            "items": {
     3466                                "type": "string"
     3467                            },
     3468                            "required": false
     3469                        },
     3470                        "menus": {
     3471                            "description": "The terms assigned to the object in the nav_menu taxonomy.",
     3472                            "type": "integer",
     3473                            "required": false
     3474                        },
     3475                        "meta": {
     3476                            "description": "Meta fields.",
     3477                            "type": "object",
     3478                            "properties": [],
     3479                            "required": false
     3480                        }
     3481                    }
     3482                }
     3483            ]
     3484        },
     3485        "/wp/v2/menu-items/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+)": {
     3486            "namespace": "wp/v2",
     3487            "methods": [
     3488                "GET"
     3489            ],
     3490            "endpoints": [
     3491                {
     3492                    "methods": [
     3493                        "GET"
     3494                    ],
     3495                    "args": {
     3496                        "parent": {
     3497                            "description": "The ID for the parent of the autosave.",
     3498                            "type": "integer",
     3499                            "required": false
     3500                        },
     3501                        "id": {
     3502                            "description": "The ID for the autosave.",
     3503                            "type": "integer",
     3504                            "required": false
     3505                        },
     3506                        "context": {
     3507                            "description": "Scope under which the request is made; determines fields present in response.",
     3508                            "type": "string",
     3509                            "enum": [
     3510                                "view",
     3511                                "embed",
     3512                                "edit"
     3513                            ],
     3514                            "default": "view",
     3515                            "required": false
     3516                        }
     3517                    }
     3518                }
     3519            ]
     3520        },
     3521        "/wp/v2/blocks": {
     3522            "namespace": "wp/v2",
     3523            "methods": [
     3524                "GET",
     3525                "POST"
     3526            ],
     3527            "endpoints": [
     3528                {
     3529                    "methods": [
     3530                        "GET"
     3531                    ],
     3532                    "allow_batch": {
     3533                        "v1": true
     3534                    },
     3535                    "args": {
     3536                        "context": {
     3537                            "description": "Scope under which the request is made; determines fields present in response.",
     3538                            "type": "string",
     3539                            "enum": [
     3540                                "view",
     3541                                "embed",
     3542                                "edit"
     3543                            ],
     3544                            "default": "view",
     3545                            "required": false
     3546                        },
     3547                        "page": {
     3548                            "description": "Current page of the collection.",
     3549                            "type": "integer",
     3550                            "default": 1,
     3551                            "minimum": 1,
     3552                            "required": false
     3553                        },
     3554                        "per_page": {
     3555                            "description": "Maximum number of items to be returned in result set.",
     3556                            "type": "integer",
     3557                            "default": 10,
     3558                            "minimum": 1,
     3559                            "maximum": 100,
     3560                            "required": false
     3561                        },
     3562                        "search": {
     3563                            "description": "Limit results to those matching a string.",
     3564                            "type": "string",
     3565                            "required": false
     3566                        },
     3567                        "after": {
     3568                            "description": "Limit response to posts published after a given ISO8601 compliant date.",
     3569                            "type": "string",
     3570                            "format": "date-time",
     3571                            "required": false
     3572                        },
     3573                        "modified_after": {
     3574                            "description": "Limit response to posts modified after a given ISO8601 compliant date.",
     3575                            "type": "string",
     3576                            "format": "date-time",
     3577                            "required": false
     3578                        },
     3579                        "before": {
     3580                            "description": "Limit response to posts published before a given ISO8601 compliant date.",
     3581                            "type": "string",
     3582                            "format": "date-time",
     3583                            "required": false
     3584                        },
     3585                        "modified_before": {
     3586                            "description": "Limit response to posts modified before a given ISO8601 compliant date.",
     3587                            "type": "string",
     3588                            "format": "date-time",
     3589                            "required": false
     3590                        },
     3591                        "exclude": {
     3592                            "description": "Ensure result set excludes specific IDs.",
     3593                            "type": "array",
     3594                            "items": {
     3595                                "type": "integer"
     3596                            },
     3597                            "default": [],
     3598                            "required": false
     3599                        },
     3600                        "include": {
     3601                            "description": "Limit result set to specific IDs.",
     3602                            "type": "array",
     3603                            "items": {
     3604                                "type": "integer"
     3605                            },
     3606                            "default": [],
     3607                            "required": false
     3608                        },
     3609                        "offset": {
     3610                            "description": "Offset the result set by a specific number of items.",
     3611                            "type": "integer",
     3612                            "required": false
     3613                        },
     3614                        "order": {
     3615                            "description": "Order sort attribute ascending or descending.",
     3616                            "type": "string",
     3617                            "default": "desc",
     3618                            "enum": [
     3619                                "asc",
     3620                                "desc"
     3621                            ],
     3622                            "required": false
     3623                        },
     3624                        "orderby": {
     3625                            "description": "Sort collection by post attribute.",
     3626                            "type": "string",
     3627                            "default": "date",
     3628                            "enum": [
     3629                                "author",
     3630                                "date",
     3631                                "id",
     3632                                "include",
     3633                                "modified",
     3634                                "parent",
     3635                                "relevance",
     3636                                "slug",
     3637                                "include_slugs",
     3638                                "title"
     3639                            ],
     3640                            "required": false
     3641                        },
     3642                        "search_columns": {
     3643                            "default": [],
     3644                            "description": "Array of column names to be searched.",
     3645                            "type": "array",
     3646                            "items": {
     3647                                "enum": [
     3648                                    "post_title",
     3649                                    "post_content",
     3650                                    "post_excerpt"
     3651                                ],
     3652                                "type": "string"
     3653                            },
     3654                            "required": false
     3655                        },
     3656                        "slug": {
     3657                            "description": "Limit result set to posts with one or more specific slugs.",
     3658                            "type": "array",
     3659                            "items": {
     3660                                "type": "string"
     3661                            },
     3662                            "required": false
     3663                        },
     3664                        "status": {
     3665                            "default": "publish",
     3666                            "description": "Limit result set to posts assigned one or more statuses.",
     3667                            "type": "array",
     3668                            "items": {
     3669                                "enum": [
     3670                                    "publish",
     3671                                    "future",
     3672                                    "draft",
     3673                                    "pending",
     3674                                    "private",
     3675                                    "trash",
     3676                                    "auto-draft",
     3677                                    "inherit",
     3678                                    "request-pending",
     3679                                    "request-confirmed",
     3680                                    "request-failed",
     3681                                    "request-completed",
     3682                                    "any"
     3683                                ],
     3684                                "type": "string"
     3685                            },
     3686                            "required": false
     3687                        },
     3688                        "tax_relation": {
     3689                            "description": "Limit result set based on relationship between multiple taxonomies.",
     3690                            "type": "string",
     3691                            "enum": [
     3692                                "AND",
     3693                                "OR"
     3694                            ],
     3695                            "required": false
     3696                        },
     3697                        "wp_pattern_category": {
     3698                            "description": "Limit result set to items with specific terms assigned in the wp_pattern_category taxonomy.",
     3699                            "type": [
     3700                                "object",
     3701                                "array"
     3702                            ],
     3703                            "oneOf": [
     3704                                {
     3705                                    "title": "Term ID List",
     3706                                    "description": "Match terms with the listed IDs.",
     3707                                    "type": "array",
     3708                                    "items": {
     3709                                        "type": "integer"
     3710                                    }
     3711                                },
     3712                                {
     3713                                    "title": "Term ID Taxonomy Query",
     3714                                    "description": "Perform an advanced term query.",
     3715                                    "type": "object",
     3716                                    "properties": {
     3717                                        "terms": {
     3718                                            "description": "Term IDs.",
     3719                                            "type": "array",
     3720                                            "items": {
     3721                                                "type": "integer"
     3722                                            },
     3723                                            "default": []
     3724                                        },
     3725                                        "operator": {
     3726                                            "description": "Whether items must be assigned all or any of the specified terms.",
     3727                                            "type": "string",
     3728                                            "enum": [
     3729                                                "AND",
     3730                                                "OR"
     3731                                            ],
     3732                                            "default": "OR"
     3733                                        }
     3734                                    },
     3735                                    "additionalProperties": false
     3736                                }
     3737                            ],
     3738                            "required": false
     3739                        },
     3740                        "wp_pattern_category_exclude": {
     3741                            "description": "Limit result set to items except those with specific terms assigned in the wp_pattern_category taxonomy.",
     3742                            "type": [
     3743                                "object",
     3744                                "array"
     3745                            ],
     3746                            "oneOf": [
     3747                                {
     3748                                    "title": "Term ID List",
     3749                                    "description": "Match terms with the listed IDs.",
     3750                                    "type": "array",
     3751                                    "items": {
     3752                                        "type": "integer"
     3753                                    }
     3754                                },
     3755                                {
     3756                                    "title": "Term ID Taxonomy Query",
     3757                                    "description": "Perform an advanced term query.",
     3758                                    "type": "object",
     3759                                    "properties": {
     3760                                        "terms": {
     3761                                            "description": "Term IDs.",
     3762                                            "type": "array",
     3763                                            "items": {
     3764                                                "type": "integer"
     3765                                            },
     3766                                            "default": []
     3767                                        }
     3768                                    },
     3769                                    "additionalProperties": false
     3770                                }
     3771                            ],
     3772                            "required": false
     3773                        }
     3774                    }
     3775                },
     3776                {
     3777                    "methods": [
     3778                        "POST"
     3779                    ],
     3780                    "allow_batch": {
     3781                        "v1": true
     3782                    },
     3783                    "args": {
     3784                        "date": {
     3785                            "description": "The date the post was published, in the site's timezone.",
     3786                            "type": [
     3787                                "string",
     3788                                "null"
     3789                            ],
     3790                            "format": "date-time",
     3791                            "required": false
     3792                        },
     3793                        "date_gmt": {
     3794                            "description": "The date the post was published, as GMT.",
     3795                            "type": [
     3796                                "string",
     3797                                "null"
     3798                            ],
     3799                            "format": "date-time",
     3800                            "required": false
     3801                        },
     3802                        "slug": {
     3803                            "description": "An alphanumeric identifier for the post unique to its type.",
     3804                            "type": "string",
     3805                            "required": false
     3806                        },
     3807                        "status": {
     3808                            "description": "A named status for the post.",
     3809                            "type": "string",
     3810                            "enum": [
     3811                                "publish",
     3812                                "future",
     3813                                "draft",
     3814                                "pending",
     3815                                "private"
     3816                            ],
     3817                            "required": false
     3818                        },
     3819                        "password": {
     3820                            "description": "A password to protect access to the content and excerpt.",
     3821                            "type": "string",
     3822                            "required": false
     3823                        },
     3824                        "title": {
     3825                            "description": "The title for the post.",
     3826                            "type": "object",
     3827                            "properties": {
     3828                                "raw": {
     3829                                    "description": "Title for the post, as it exists in the database.",
     3830                                    "type": "string",
     3831                                    "context": [
     3832                                        "view",
     3833                                        "edit"
     3834                                    ]
     3835                                }
     3836                            },
     3837                            "required": false
     3838                        },
     3839                        "content": {
     3840                            "description": "The content for the post.",
     3841                            "type": "object",
     3842                            "properties": {
     3843                                "raw": {
     3844                                    "description": "Content for the post, as it exists in the database.",
     3845                                    "type": "string",
     3846                                    "context": [
     3847                                        "view",
     3848                                        "edit"
     3849                                    ]
     3850                                },
     3851                                "block_version": {
     3852                                    "description": "Version of the content block format used by the post.",
     3853                                    "type": "integer",
     3854                                    "context": [
     3855                                        "edit"
     3856                                    ],
     3857                                    "readonly": true
     3858                                },
     3859                                "protected": {
     3860                                    "description": "Whether the content is protected with a password.",
     3861                                    "type": "boolean",
     3862                                    "context": [
     3863                                        "view",
     3864                                        "edit",
     3865                                        "embed"
     3866                                    ],
     3867                                    "readonly": true
     3868                                }
     3869                            },
     3870                            "required": false
     3871                        },
     3872                        "meta": {
     3873                            "description": "Meta fields.",
     3874                            "type": "object",
     3875                            "properties": [],
     3876                            "required": false
     3877                        },
     3878                        "template": {
     3879                            "description": "The theme file to use to display the post.",
     3880                            "type": "string",
     3881                            "required": false
     3882                        },
     3883                        "wp_pattern_category": {
     3884                            "description": "The terms assigned to the post in the wp_pattern_category taxonomy.",
     3885                            "type": "array",
     3886                            "items": {
     3887                                "type": "integer"
     3888                            },
     3889                            "required": false
     3890                        }
     3891                    }
     3892                }
     3893            ],
     3894            "_links": {
     3895                "self": "http://example.org/index.php?rest_route=/wp/v2/blocks"
     3896            }
     3897        },
     3898        "/wp/v2/blocks/(?P<id>[\\d]+)": {
     3899            "namespace": "wp/v2",
     3900            "methods": [
     3901                "GET",
     3902                "POST",
     3903                "PUT",
     3904                "PATCH",
     3905                "DELETE"
     3906            ],
     3907            "endpoints": [
     3908                {
     3909                    "methods": [
     3910                        "GET"
     3911                    ],
     3912                    "allow_batch": {
     3913                        "v1": true
     3914                    },
     3915                    "args": {
     3916                        "id": {
     3917                            "description": "Unique identifier for the post.",
     3918                            "type": "integer",
     3919                            "required": false
     3920                        },
     3921                        "context": {
     3922                            "description": "Scope under which the request is made; determines fields present in response.",
     3923                            "type": "string",
     3924                            "enum": [
     3925                                "view",
     3926                                "embed",
     3927                                "edit"
     3928                            ],
     3929                            "default": "view",
     3930                            "required": false
     3931                        },
     3932                        "password": {
     3933                            "description": "The password for the post if it is password protected.",
     3934                            "type": "string",
     3935                            "required": false
     3936                        }
     3937                    }
     3938                },
     3939                {
     3940                    "methods": [
     3941                        "POST",
     3942                        "PUT",
     3943                        "PATCH"
     3944                    ],
     3945                    "allow_batch": {
     3946                        "v1": true
     3947                    },
     3948                    "args": {
     3949                        "id": {
     3950                            "description": "Unique identifier for the post.",
     3951                            "type": "integer",
     3952                            "required": false
     3953                        },
     3954                        "date": {
     3955                            "description": "The date the post was published, in the site's timezone.",
     3956                            "type": [
     3957                                "string",
     3958                                "null"
     3959                            ],
     3960                            "format": "date-time",
     3961                            "required": false
     3962                        },
     3963                        "date_gmt": {
     3964                            "description": "The date the post was published, as GMT.",
     3965                            "type": [
     3966                                "string",
     3967                                "null"
     3968                            ],
     3969                            "format": "date-time",
     3970                            "required": false
     3971                        },
     3972                        "slug": {
     3973                            "description": "An alphanumeric identifier for the post unique to its type.",
     3974                            "type": "string",
     3975                            "required": false
     3976                        },
     3977                        "status": {
     3978                            "description": "A named status for the post.",
     3979                            "type": "string",
     3980                            "enum": [
     3981                                "publish",
     3982                                "future",
     3983                                "draft",
     3984                                "pending",
     3985                                "private"
     3986                            ],
     3987                            "required": false
     3988                        },
     3989                        "password": {
     3990                            "description": "A password to protect access to the content and excerpt.",
     3991                            "type": "string",
     3992                            "required": false
     3993                        },
     3994                        "title": {
     3995                            "description": "The title for the post.",
     3996                            "type": "object",
     3997                            "properties": {
     3998                                "raw": {
     3999                                    "description": "Title for the post, as it exists in the database.",
     4000                                    "type": "string",
     4001                                    "context": [
     4002                                        "view",
     4003                                        "edit"
     4004                                    ]
     4005                                }
     4006                            },
     4007                            "required": false
     4008                        },
     4009                        "content": {
     4010                            "description": "The content for the post.",
     4011                            "type": "object",
     4012                            "properties": {
     4013                                "raw": {
     4014                                    "description": "Content for the post, as it exists in the database.",
     4015                                    "type": "string",
     4016                                    "context": [
     4017                                        "view",
     4018                                        "edit"
     4019                                    ]
     4020                                },
     4021                                "block_version": {
     4022                                    "description": "Version of the content block format used by the post.",
     4023                                    "type": "integer",
     4024                                    "context": [
     4025                                        "edit"
     4026                                    ],
     4027                                    "readonly": true
     4028                                },
     4029                                "protected": {
     4030                                    "description": "Whether the content is protected with a password.",
     4031                                    "type": "boolean",
     4032                                    "context": [
     4033                                        "view",
     4034                                        "edit",
     4035                                        "embed"
     4036                                    ],
     4037                                    "readonly": true
     4038                                }
     4039                            },
     4040                            "required": false
     4041                        },
     4042                        "meta": {
     4043                            "description": "Meta fields.",
     4044                            "type": "object",
     4045                            "properties": [],
     4046                            "required": false
     4047                        },
     4048                        "template": {
     4049                            "description": "The theme file to use to display the post.",
     4050                            "type": "string",
     4051                            "required": false
     4052                        },
     4053                        "wp_pattern_category": {
     4054                            "description": "The terms assigned to the post in the wp_pattern_category taxonomy.",
     4055                            "type": "array",
     4056                            "items": {
     4057                                "type": "integer"
     4058                            },
     4059                            "required": false
     4060                        }
     4061                    }
     4062                },
     4063                {
     4064                    "methods": [
     4065                        "DELETE"
     4066                    ],
     4067                    "allow_batch": {
     4068                        "v1": true
     4069                    },
     4070                    "args": {
     4071                        "id": {
     4072                            "description": "Unique identifier for the post.",
     4073                            "type": "integer",
     4074                            "required": false
     4075                        },
     4076                        "force": {
     4077                            "type": "boolean",
     4078                            "default": false,
     4079                            "description": "Whether to bypass Trash and force deletion.",
     4080                            "required": false
     4081                        }
     4082                    }
     4083                }
     4084            ]
     4085        },
     4086        "/wp/v2/blocks/(?P<parent>[\\d]+)/revisions": {
     4087            "namespace": "wp/v2",
     4088            "methods": [
     4089                "GET"
     4090            ],
     4091            "endpoints": [
     4092                {
     4093                    "methods": [
     4094                        "GET"
     4095                    ],
     4096                    "args": {
     4097                        "parent": {
     4098                            "description": "The ID for the parent of the revision.",
     4099                            "type": "integer",
     4100                            "required": false
     4101                        },
     4102                        "context": {
     4103                            "description": "Scope under which the request is made; determines fields present in response.",
     4104                            "type": "string",
     4105                            "enum": [
     4106                                "view",
     4107                                "embed",
     4108                                "edit"
     4109                            ],
     4110                            "default": "view",
     4111                            "required": false
     4112                        },
     4113                        "page": {
     4114                            "description": "Current page of the collection.",
     4115                            "type": "integer",
     4116                            "default": 1,
     4117                            "minimum": 1,
     4118                            "required": false
     4119                        },
     4120                        "per_page": {
     4121                            "description": "Maximum number of items to be returned in result set.",
     4122                            "type": "integer",
     4123                            "minimum": 1,
     4124                            "maximum": 100,
     4125                            "required": false
     4126                        },
     4127                        "search": {
     4128                            "description": "Limit results to those matching a string.",
     4129                            "type": "string",
     4130                            "required": false
     4131                        },
     4132                        "exclude": {
     4133                            "description": "Ensure result set excludes specific IDs.",
     4134                            "type": "array",
     4135                            "items": {
     4136                                "type": "integer"
     4137                            },
     4138                            "default": [],
     4139                            "required": false
     4140                        },
     4141                        "include": {
     4142                            "description": "Limit result set to specific IDs.",
     4143                            "type": "array",
     4144                            "items": {
     4145                                "type": "integer"
     4146                            },
     4147                            "default": [],
     4148                            "required": false
     4149                        },
     4150                        "offset": {
     4151                            "description": "Offset the result set by a specific number of items.",
     4152                            "type": "integer",
     4153                            "required": false
     4154                        },
     4155                        "order": {
     4156                            "description": "Order sort attribute ascending or descending.",
     4157                            "type": "string",
     4158                            "default": "desc",
     4159                            "enum": [
     4160                                "asc",
     4161                                "desc"
     4162                            ],
     4163                            "required": false
     4164                        },
     4165                        "orderby": {
     4166                            "description": "Sort collection by object attribute.",
     4167                            "type": "string",
     4168                            "default": "date",
     4169                            "enum": [
     4170                                "date",
     4171                                "id",
     4172                                "include",
     4173                                "relevance",
     4174                                "slug",
     4175                                "include_slugs",
     4176                                "title"
     4177                            ],
     4178                            "required": false
     4179                        }
     4180                    }
     4181                }
     4182            ]
     4183        },
     4184        "/wp/v2/blocks/(?P<parent>[\\d]+)/revisions/(?P<id>[\\d]+)": {
     4185            "namespace": "wp/v2",
     4186            "methods": [
     4187                "GET",
     4188                "DELETE"
     4189            ],
     4190            "endpoints": [
     4191                {
     4192                    "methods": [
     4193                        "GET"
     4194                    ],
     4195                    "args": {
     4196                        "parent": {
     4197                            "description": "The ID for the parent of the revision.",
     4198                            "type": "integer",
     4199                            "required": false
     4200                        },
     4201                        "id": {
     4202                            "description": "Unique identifier for the revision.",
     4203                            "type": "integer",
     4204                            "required": false
     4205                        },
     4206                        "context": {
     4207                            "description": "Scope under which the request is made; determines fields present in response.",
     4208                            "type": "string",
     4209                            "enum": [
     4210                                "view",
     4211                                "embed",
     4212                                "edit"
     4213                            ],
     4214                            "default": "view",
     4215                            "required": false
     4216                        }
     4217                    }
     4218                },
     4219                {
     4220                    "methods": [
     4221                        "DELETE"
     4222                    ],
     4223                    "args": {
     4224                        "parent": {
     4225                            "description": "The ID for the parent of the revision.",
     4226                            "type": "integer",
     4227                            "required": false
     4228                        },
     4229                        "id": {
     4230                            "description": "Unique identifier for the revision.",
     4231                            "type": "integer",
     4232                            "required": false
     4233                        },
     4234                        "force": {
     4235                            "type": "boolean",
     4236                            "default": false,
     4237                            "description": "Required to be true, as revisions do not support trashing.",
     4238                            "required": false
     4239                        }
     4240                    }
     4241                }
     4242            ]
     4243        },
     4244        "/wp/v2/blocks/(?P<id>[\\d]+)/autosaves": {
     4245            "namespace": "wp/v2",
     4246            "methods": [
     4247                "GET",
     4248                "POST"
     4249            ],
     4250            "endpoints": [
     4251                {
     4252                    "methods": [
     4253                        "GET"
     4254                    ],
     4255                    "args": {
     4256                        "parent": {
     4257                            "description": "The ID for the parent of the autosave.",
     4258                            "type": "integer",
     4259                            "required": false
     4260                        },
     4261                        "context": {
     4262                            "description": "Scope under which the request is made; determines fields present in response.",
     4263                            "type": "string",
     4264                            "enum": [
     4265                                "view",
     4266                                "embed",
     4267                                "edit"
     4268                            ],
     4269                            "default": "view",
     4270                            "required": false
     4271                        }
     4272                    }
     4273                },
     4274                {
     4275                    "methods": [
     4276                        "POST"
     4277                    ],
     4278                    "args": {
     4279                        "parent": {
     4280                            "description": "The ID for the parent of the autosave.",
     4281                            "type": "integer",
     4282                            "required": false
     4283                        },
     4284                        "date": {
     4285                            "description": "The date the post was published, in the site's timezone.",
     4286                            "type": [
     4287                                "string",
     4288                                "null"
     4289                            ],
     4290                            "format": "date-time",
     4291                            "required": false
     4292                        },
     4293                        "date_gmt": {
     4294                            "description": "The date the post was published, as GMT.",
     4295                            "type": [
     4296                                "string",
     4297                                "null"
     4298                            ],
     4299                            "format": "date-time",
     4300                            "required": false
     4301                        },
     4302                        "slug": {
     4303                            "description": "An alphanumeric identifier for the post unique to its type.",
     4304                            "type": "string",
     4305                            "required": false
     4306                        },
     4307                        "status": {
     4308                            "description": "A named status for the post.",
     4309                            "type": "string",
     4310                            "enum": [
     4311                                "publish",
     4312                                "future",
     4313                                "draft",
     4314                                "pending",
     4315                                "private"
     4316                            ],
     4317                            "required": false
     4318                        },
     4319                        "password": {
     4320                            "description": "A password to protect access to the content and excerpt.",
     4321                            "type": "string",
     4322                            "required": false
     4323                        },
     4324                        "title": {
     4325                            "description": "The title for the post.",
     4326                            "type": "object",
     4327                            "properties": {
     4328                                "raw": {
     4329                                    "description": "Title for the post, as it exists in the database.",
     4330                                    "type": "string",
     4331                                    "context": [
     4332                                        "view",
     4333                                        "edit"
     4334                                    ]
     4335                                }
     4336                            },
     4337                            "required": false
     4338                        },
     4339                        "content": {
     4340                            "description": "The content for the post.",
     4341                            "type": "object",
     4342                            "properties": {
     4343                                "raw": {
     4344                                    "description": "Content for the post, as it exists in the database.",
     4345                                    "type": "string",
     4346                                    "context": [
     4347                                        "view",
     4348                                        "edit"
     4349                                    ]
     4350                                },
     4351                                "block_version": {
     4352                                    "description": "Version of the content block format used by the post.",
     4353                                    "type": "integer",
     4354                                    "context": [
     4355                                        "edit"
     4356                                    ],
     4357                                    "readonly": true
     4358                                },
     4359                                "protected": {
     4360                                    "description": "Whether the content is protected with a password.",
     4361                                    "type": "boolean",
     4362                                    "context": [
     4363                                        "view",
     4364                                        "edit",
     4365                                        "embed"
     4366                                    ],
     4367                                    "readonly": true
     4368                                }
     4369                            },
     4370                            "required": false
     4371                        },
     4372                        "meta": {
     4373                            "description": "Meta fields.",
     4374                            "type": "object",
     4375                            "properties": [],
     4376                            "required": false
     4377                        },
     4378                        "template": {
     4379                            "description": "The theme file to use to display the post.",
     4380                            "type": "string",
     4381                            "required": false
     4382                        },
     4383                        "wp_pattern_category": {
     4384                            "description": "The terms assigned to the post in the wp_pattern_category taxonomy.",
     4385                            "type": "array",
     4386                            "items": {
     4387                                "type": "integer"
     4388                            },
     4389                            "required": false
     4390                        }
     4391                    }
     4392                }
     4393            ]
     4394        },
     4395        "/wp/v2/blocks/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+)": {
     4396            "namespace": "wp/v2",
     4397            "methods": [
     4398                "GET"
     4399            ],
     4400            "endpoints": [
     4401                {
     4402                    "methods": [
     4403                        "GET"
     4404                    ],
     4405                    "args": {
     4406                        "parent": {
     4407                            "description": "The ID for the parent of the autosave.",
     4408                            "type": "integer",
     4409                            "required": false
     4410                        },
     4411                        "id": {
     4412                            "description": "The ID for the autosave.",
     4413                            "type": "integer",
     4414                            "required": false
     4415                        },
     4416                        "context": {
     4417                            "description": "Scope under which the request is made; determines fields present in response.",
     4418                            "type": "string",
     4419                            "enum": [
     4420                                "view",
     4421                                "embed",
     4422                                "edit"
     4423                            ],
     4424                            "default": "view",
     4425                            "required": false
     4426                        }
     4427                    }
     4428                }
     4429            ]
     4430        },
     4431        "/wp/v2/templates/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/revisions": {
     4432            "namespace": "wp/v2",
     4433            "methods": [
     4434                "GET"
     4435            ],
     4436            "endpoints": [
     4437                {
     4438                    "methods": [
     4439                        "GET"
     4440                    ],
     4441                    "args": {
     4442                        "parent": {
     4443                            "description": "The id of a template",
     4444                            "type": "string",
     4445                            "required": false
     4446                        },
     4447                        "context": {
     4448                            "description": "Scope under which the request is made; determines fields present in response.",
     4449                            "type": "string",
     4450                            "enum": [
     4451                                "view",
     4452                                "embed",
     4453                                "edit"
     4454                            ],
     4455                            "default": "view",
     4456                            "required": false
     4457                        },
     4458                        "page": {
     4459                            "description": "Current page of the collection.",
     4460                            "type": "integer",
     4461                            "default": 1,
     4462                            "minimum": 1,
     4463                            "required": false
     4464                        },
     4465                        "per_page": {
     4466                            "description": "Maximum number of items to be returned in result set.",
     4467                            "type": "integer",
     4468                            "minimum": 1,
     4469                            "maximum": 100,
     4470                            "required": false
     4471                        },
     4472                        "search": {
     4473                            "description": "Limit results to those matching a string.",
     4474                            "type": "string",
     4475                            "required": false
     4476                        },
     4477                        "exclude": {
     4478                            "description": "Ensure result set excludes specific IDs.",
     4479                            "type": "array",
     4480                            "items": {
     4481                                "type": "integer"
     4482                            },
     4483                            "default": [],
     4484                            "required": false
     4485                        },
     4486                        "include": {
     4487                            "description": "Limit result set to specific IDs.",
     4488                            "type": "array",
     4489                            "items": {
     4490                                "type": "integer"
     4491                            },
     4492                            "default": [],
     4493                            "required": false
     4494                        },
     4495                        "offset": {
     4496                            "description": "Offset the result set by a specific number of items.",
     4497                            "type": "integer",
     4498                            "required": false
     4499                        },
     4500                        "order": {
     4501                            "description": "Order sort attribute ascending or descending.",
     4502                            "type": "string",
     4503                            "default": "desc",
     4504                            "enum": [
     4505                                "asc",
     4506                                "desc"
     4507                            ],
     4508                            "required": false
     4509                        },
     4510                        "orderby": {
     4511                            "description": "Sort collection by object attribute.",
     4512                            "type": "string",
     4513                            "default": "date",
     4514                            "enum": [
     4515                                "date",
     4516                                "id",
     4517                                "include",
     4518                                "relevance",
     4519                                "slug",
     4520                                "include_slugs",
     4521                                "title"
     4522                            ],
     4523                            "required": false
     4524                        }
     4525                    }
     4526                }
     4527            ]
     4528        },
     4529        "/wp/v2/templates/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/revisions/(?P<id>[\\d]+)": {
     4530            "namespace": "wp/v2",
     4531            "methods": [
     4532                "GET",
     4533                "DELETE"
     4534            ],
     4535            "endpoints": [
     4536                {
     4537                    "methods": [
     4538                        "GET"
     4539                    ],
     4540                    "args": {
     4541                        "parent": {
     4542                            "description": "The id of a template",
     4543                            "type": "string",
     4544                            "required": false
     4545                        },
     4546                        "id": {
     4547                            "description": "Unique identifier for the revision.",
     4548                            "type": "integer",
     4549                            "required": false
     4550                        },
     4551                        "context": {
     4552                            "description": "Scope under which the request is made; determines fields present in response.",
     4553                            "type": "string",
     4554                            "enum": [
     4555                                "view",
     4556                                "embed",
     4557                                "edit"
     4558                            ],
     4559                            "default": "view",
     4560                            "required": false
     4561                        }
     4562                    }
     4563                },
     4564                {
     4565                    "methods": [
     4566                        "DELETE"
     4567                    ],
     4568                    "args": {
     4569                        "parent": {
     4570                            "description": "The id of a template",
     4571                            "type": "string",
     4572                            "required": false
     4573                        },
     4574                        "id": {
     4575                            "description": "Unique identifier for the revision.",
     4576                            "type": "integer",
     4577                            "required": false
     4578                        },
     4579                        "force": {
     4580                            "type": "boolean",
     4581                            "default": false,
     4582                            "description": "Required to be true, as revisions do not support trashing.",
     4583                            "required": false
     4584                        }
     4585                    }
     4586                }
     4587            ]
     4588        },
     4589        "/wp/v2/templates/(?P<id>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/autosaves": {
     4590            "namespace": "wp/v2",
     4591            "methods": [
     4592                "GET",
     4593                "POST"
     4594            ],
     4595            "endpoints": [
     4596                {
     4597                    "methods": [
     4598                        "GET"
     4599                    ],
     4600                    "args": {
     4601                        "id": {
     4602                            "description": "The id of a template",
     4603                            "type": "string",
     4604                            "required": false
     4605                        },
     4606                        "context": {
     4607                            "description": "Scope under which the request is made; determines fields present in response.",
     4608                            "type": "string",
     4609                            "enum": [
     4610                                "view",
     4611                                "embed",
     4612                                "edit"
     4613                            ],
     4614                            "default": "view",
     4615                            "required": false
     4616                        }
     4617                    }
     4618                },
     4619                {
     4620                    "methods": [
     4621                        "POST"
     4622                    ],
     4623                    "args": {
     4624                        "id": {
     4625                            "description": "The id of a template",
     4626                            "type": "string",
     4627                            "required": false
     4628                        },
     4629                        "slug": {
     4630                            "description": "Unique slug identifying the template.",
     4631                            "type": "string",
     4632                            "minLength": 1,
     4633                            "pattern": "[a-zA-Z0-9_\\%-]+",
     4634                            "required": false
     4635                        },
     4636                        "theme": {
     4637                            "description": "Theme identifier for the template.",
     4638                            "type": "string",
     4639                            "required": false
     4640                        },
     4641                        "type": {
     4642                            "description": "Type of template.",
     4643                            "type": "string",
     4644                            "required": false
     4645                        },
     4646                        "content": {
     4647                            "description": "Content of template.",
     4648                            "type": [
     4649                                "object",
     4650                                "string"
     4651                            ],
     4652                            "properties": {
     4653                                "raw": {
     4654                                    "description": "Content for the template, as it exists in the database.",
     4655                                    "type": "string",
     4656                                    "context": [
     4657                                        "view",
     4658                                        "edit"
     4659                                    ]
     4660                                },
     4661                                "block_version": {
     4662                                    "description": "Version of the content block format used by the template.",
     4663                                    "type": "integer",
     4664                                    "context": [
     4665                                        "edit"
     4666                                    ],
     4667                                    "readonly": true
     4668                                }
     4669                            },
     4670                            "required": false
     4671                        },
     4672                        "title": {
     4673                            "description": "Title of template.",
     4674                            "type": [
     4675                                "object",
     4676                                "string"
     4677                            ],
     4678                            "properties": {
     4679                                "raw": {
     4680                                    "description": "Title for the template, as it exists in the database.",
     4681                                    "type": "string",
     4682                                    "context": [
     4683                                        "view",
     4684                                        "edit",
     4685                                        "embed"
     4686                                    ]
     4687                                },
     4688                                "rendered": {
     4689                                    "description": "HTML title for the template, transformed for display.",
     4690                                    "type": "string",
     4691                                    "context": [
     4692                                        "view",
     4693                                        "edit",
     4694                                        "embed"
     4695                                    ],
     4696                                    "readonly": true
     4697                                }
     4698                            },
     4699                            "required": false
     4700                        },
     4701                        "description": {
     4702                            "description": "Description of template.",
     4703                            "type": "string",
     4704                            "required": false
     4705                        },
     4706                        "status": {
     4707                            "description": "Status of template.",
     4708                            "type": "string",
     4709                            "enum": [
     4710                                "publish",
     4711                                "future",
     4712                                "draft",
     4713                                "pending",
     4714                                "private"
     4715                            ],
     4716                            "required": false
     4717                        },
     4718                        "author": {
     4719                            "description": "The ID for the author of the template.",
     4720                            "type": "integer",
     4721                            "required": false
     4722                        }
     4723                    }
     4724                }
     4725            ]
     4726        },
     4727        "/wp/v2/templates/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/autosaves/(?P<id>[\\d]+)": {
     4728            "namespace": "wp/v2",
     4729            "methods": [
     4730                "GET"
     4731            ],
     4732            "endpoints": [
     4733                {
     4734                    "methods": [
     4735                        "GET"
     4736                    ],
     4737                    "args": {
     4738                        "parent": {
     4739                            "description": "The id of a template",
     4740                            "type": "string",
     4741                            "required": false
     4742                        },
     4743                        "id": {
     4744                            "description": "The ID for the autosave.",
     4745                            "type": "integer",
     4746                            "required": false
     4747                        },
     4748                        "context": {
     4749                            "description": "Scope under which the request is made; determines fields present in response.",
     4750                            "type": "string",
     4751                            "enum": [
     4752                                "view",
     4753                                "embed",
     4754                                "edit"
     4755                            ],
     4756                            "default": "view",
     4757                            "required": false
     4758                        }
     4759                    }
     4760                }
     4761            ]
     4762        },
     4763        "/wp/v2/templates": {
     4764            "namespace": "wp/v2",
     4765            "methods": [
     4766                "GET",
     4767                "POST"
     4768            ],
     4769            "endpoints": [
     4770                {
     4771                    "methods": [
     4772                        "GET"
     4773                    ],
     4774                    "args": {
     4775                        "context": {
     4776                            "description": "Scope under which the request is made; determines fields present in response.",
     4777                            "type": "string",
     4778                            "enum": [
     4779                                "view",
     4780                                "embed",
     4781                                "edit"
     4782                            ],
     4783                            "default": "view",
     4784                            "required": false
     4785                        },
     4786                        "wp_id": {
     4787                            "description": "Limit to the specified post id.",
     4788                            "type": "integer",
     4789                            "required": false
     4790                        },
     4791                        "area": {
     4792                            "description": "Limit to the specified template part area.",
     4793                            "type": "string",
     4794                            "required": false
     4795                        },
     4796                        "post_type": {
     4797                            "description": "Post type to get the templates for.",
     4798                            "type": "string",
     4799                            "required": false
     4800                        }
     4801                    }
     4802                },
     4803                {
     4804                    "methods": [
     4805                        "POST"
     4806                    ],
     4807                    "args": {
     4808                        "slug": {
     4809                            "description": "Unique slug identifying the template.",
     4810                            "type": "string",
     4811                            "minLength": 1,
     4812                            "pattern": "[a-zA-Z0-9_\\%-]+",
     4813                            "required": true
     4814                        },
     4815                        "theme": {
     4816                            "description": "Theme identifier for the template.",
     4817                            "type": "string",
     4818                            "required": false
     4819                        },
     4820                        "type": {
     4821                            "description": "Type of template.",
     4822                            "type": "string",
     4823                            "required": false
     4824                        },
     4825                        "content": {
     4826                            "default": "",
     4827                            "description": "Content of template.",
     4828                            "type": [
     4829                                "object",
     4830                                "string"
     4831                            ],
     4832                            "properties": {
     4833                                "raw": {
     4834                                    "description": "Content for the template, as it exists in the database.",
     4835                                    "type": "string",
     4836                                    "context": [
     4837                                        "view",
     4838                                        "edit"
     4839                                    ]
     4840                                },
     4841                                "block_version": {
     4842                                    "description": "Version of the content block format used by the template.",
     4843                                    "type": "integer",
     4844                                    "context": [
     4845                                        "edit"
     4846                                    ],
     4847                                    "readonly": true
     4848                                }
     4849                            },
     4850                            "required": false
     4851                        },
     4852                        "title": {
     4853                            "default": "",
     4854                            "description": "Title of template.",
     4855                            "type": [
     4856                                "object",
     4857                                "string"
     4858                            ],
     4859                            "properties": {
     4860                                "raw": {
     4861                                    "description": "Title for the template, as it exists in the database.",
     4862                                    "type": "string",
     4863                                    "context": [
     4864                                        "view",
     4865                                        "edit",
     4866                                        "embed"
     4867                                    ]
     4868                                },
     4869                                "rendered": {
     4870                                    "description": "HTML title for the template, transformed for display.",
     4871                                    "type": "string",
     4872                                    "context": [
     4873                                        "view",
     4874                                        "edit",
     4875                                        "embed"
     4876                                    ],
     4877                                    "readonly": true
     4878                                }
     4879                            },
     4880                            "required": false
     4881                        },
     4882                        "description": {
     4883                            "default": "",
     4884                            "description": "Description of template.",
     4885                            "type": "string",
     4886                            "required": false
     4887                        },
     4888                        "status": {
     4889                            "default": "publish",
     4890                            "description": "Status of template.",
     4891                            "type": "string",
     4892                            "enum": [
     4893                                "publish",
     4894                                "future",
     4895                                "draft",
     4896                                "pending",
     4897                                "private"
     4898                            ],
     4899                            "required": false
     4900                        },
     4901                        "author": {
     4902                            "description": "The ID for the author of the template.",
     4903                            "type": "integer",
     4904                            "required": false
     4905                        }
     4906                    }
     4907                }
     4908            ],
     4909            "_links": {
     4910                "self": [
     4911                    {
     4912                        "href": "http://example.org/index.php?rest_route=/wp/v2/templates"
     4913                    }
     4914                ]
     4915            }
     4916        },
     4917        "/wp/v2/templates/lookup": {
     4918            "namespace": "wp/v2",
     4919            "methods": [
     4920                "GET"
     4921            ],
     4922            "endpoints": [
     4923                {
     4924                    "methods": [
     4925                        "GET"
     4926                    ],
     4927                    "args": {
     4928                        "slug": {
     4929                            "description": "The slug of the template to get the fallback for",
     4930                            "type": "string",
     4931                            "required": true
     4932                        },
     4933                        "is_custom": {
     4934                            "description": "Indicates if a template is custom or part of the template hierarchy",
     4935                            "type": "boolean",
     4936                            "required": false
     4937                        },
     4938                        "template_prefix": {
     4939                            "description": "The template prefix for the created template. This is used to extract the main template type, e.g. in `taxonomy-books` extracts the `taxonomy`",
     4940                            "type": "string",
     4941                            "required": false
     4942                        }
     4943                    }
     4944                }
     4945            ],
     4946            "_links": {
     4947                "self": [
     4948                    {
     4949                        "href": "http://example.org/index.php?rest_route=/wp/v2/templates/lookup"
     4950                    }
     4951                ]
     4952            }
     4953        },
     4954        "/wp/v2/templates/(?P<id>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)": {
     4955            "namespace": "wp/v2",
     4956            "methods": [
     4957                "GET",
     4958                "POST",
     4959                "PUT",
     4960                "PATCH",
     4961                "DELETE"
     4962            ],
     4963            "endpoints": [
     4964                {
     4965                    "methods": [
     4966                        "GET"
     4967                    ],
     4968                    "args": {
     4969                        "id": {
     4970                            "description": "The id of a template",
     4971                            "type": "string",
     4972                            "required": false
     4973                        },
     4974                        "context": {
     4975                            "description": "Scope under which the request is made; determines fields present in response.",
     4976                            "type": "string",
     4977                            "enum": [
     4978                                "view",
     4979                                "embed",
     4980                                "edit"
     4981                            ],
     4982                            "default": "view",
     4983                            "required": false
     4984                        }
     4985                    }
     4986                },
     4987                {
     4988                    "methods": [
     4989                        "POST",
     4990                        "PUT",
     4991                        "PATCH"
     4992                    ],
     4993                    "args": {
     4994                        "id": {
     4995                            "description": "The id of a template",
     4996                            "type": "string",
     4997                            "required": false
     4998                        },
     4999                        "slug": {
     5000                            "description": "Unique slug identifying the template.",
     5001                            "type": "string",
     5002                            "minLength": 1,
     5003                            "pattern": "[a-zA-Z0-9_\\%-]+",
     5004                            "required": false
     5005                        },
     5006                        "theme": {
     5007                            "description": "Theme identifier for the template.",
     5008                            "type": "string",
     5009                            "required": false
     5010                        },
     5011                        "type": {
     5012                            "description": "Type of template.",
     5013                            "type": "string",
     5014                            "required": false
     5015                        },
     5016                        "content": {
     5017                            "description": "Content of template.",
     5018                            "type": [
     5019                                "object",
     5020                                "string"
     5021                            ],
     5022                            "properties": {
     5023                                "raw": {
     5024                                    "description": "Content for the template, as it exists in the database.",
     5025                                    "type": "string",
     5026                                    "context": [
     5027                                        "view",
     5028                                        "edit"
     5029                                    ]
     5030                                },
     5031                                "block_version": {
     5032                                    "description": "Version of the content block format used by the template.",
     5033                                    "type": "integer",
     5034                                    "context": [
     5035                                        "edit"
     5036                                    ],
     5037                                    "readonly": true
     5038                                }
     5039                            },
     5040                            "required": false
     5041                        },
     5042                        "title": {
     5043                            "description": "Title of template.",
     5044                            "type": [
     5045                                "object",
     5046                                "string"
     5047                            ],
     5048                            "properties": {
     5049                                "raw": {
     5050                                    "description": "Title for the template, as it exists in the database.",
     5051                                    "type": "string",
     5052                                    "context": [
     5053                                        "view",
     5054                                        "edit",
     5055                                        "embed"
     5056                                    ]
     5057                                },
     5058                                "rendered": {
     5059                                    "description": "HTML title for the template, transformed for display.",
     5060                                    "type": "string",
     5061                                    "context": [
     5062                                        "view",
     5063                                        "edit",
     5064                                        "embed"
     5065                                    ],
     5066                                    "readonly": true
     5067                                }
     5068                            },
     5069                            "required": false
     5070                        },
     5071                        "description": {
     5072                            "description": "Description of template.",
     5073                            "type": "string",
     5074                            "required": false
     5075                        },
     5076                        "status": {
     5077                            "description": "Status of template.",
     5078                            "type": "string",
     5079                            "enum": [
     5080                                "publish",
     5081                                "future",
     5082                                "draft",
     5083                                "pending",
     5084                                "private"
     5085                            ],
     5086                            "required": false
     5087                        },
     5088                        "author": {
     5089                            "description": "The ID for the author of the template.",
     5090                            "type": "integer",
     5091                            "required": false
     5092                        }
     5093                    }
     5094                },
     5095                {
     5096                    "methods": [
     5097                        "DELETE"
     5098                    ],
     5099                    "args": {
     5100                        "id": {
     5101                            "description": "The id of a template",
     5102                            "type": "string",
     5103                            "required": false
     5104                        },
     5105                        "force": {
     5106                            "type": "boolean",
     5107                            "default": false,
     5108                            "description": "Whether to bypass Trash and force deletion.",
     5109                            "required": false
     5110                        }
     5111                    }
     5112                }
     5113            ]
     5114        },
     5115        "/wp/v2/template-parts/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/revisions": {
     5116            "namespace": "wp/v2",
     5117            "methods": [
     5118                "GET"
     5119            ],
     5120            "endpoints": [
     5121                {
     5122                    "methods": [
     5123                        "GET"
     5124                    ],
     5125                    "args": {
     5126                        "parent": {
     5127                            "description": "The id of a template",
     5128                            "type": "string",
     5129                            "required": false
     5130                        },
     5131                        "context": {
     5132                            "description": "Scope under which the request is made; determines fields present in response.",
     5133                            "type": "string",
     5134                            "enum": [
     5135                                "view",
     5136                                "embed",
     5137                                "edit"
     5138                            ],
     5139                            "default": "view",
     5140                            "required": false
     5141                        },
     5142                        "page": {
     5143                            "description": "Current page of the collection.",
     5144                            "type": "integer",
     5145                            "default": 1,
     5146                            "minimum": 1,
     5147                            "required": false
     5148                        },
     5149                        "per_page": {
     5150                            "description": "Maximum number of items to be returned in result set.",
     5151                            "type": "integer",
     5152                            "minimum": 1,
     5153                            "maximum": 100,
     5154                            "required": false
     5155                        },
     5156                        "search": {
     5157                            "description": "Limit results to those matching a string.",
     5158                            "type": "string",
     5159                            "required": false
     5160                        },
     5161                        "exclude": {
     5162                            "description": "Ensure result set excludes specific IDs.",
     5163                            "type": "array",
     5164                            "items": {
     5165                                "type": "integer"
     5166                            },
     5167                            "default": [],
     5168                            "required": false
     5169                        },
     5170                        "include": {
     5171                            "description": "Limit result set to specific IDs.",
     5172                            "type": "array",
     5173                            "items": {
     5174                                "type": "integer"
     5175                            },
     5176                            "default": [],
     5177                            "required": false
     5178                        },
     5179                        "offset": {
     5180                            "description": "Offset the result set by a specific number of items.",
     5181                            "type": "integer",
     5182                            "required": false
     5183                        },
     5184                        "order": {
     5185                            "description": "Order sort attribute ascending or descending.",
     5186                            "type": "string",
     5187                            "default": "desc",
     5188                            "enum": [
     5189                                "asc",
     5190                                "desc"
     5191                            ],
     5192                            "required": false
     5193                        },
     5194                        "orderby": {
     5195                            "description": "Sort collection by object attribute.",
     5196                            "type": "string",
     5197                            "default": "date",
     5198                            "enum": [
     5199                                "date",
     5200                                "id",
     5201                                "include",
     5202                                "relevance",
     5203                                "slug",
     5204                                "include_slugs",
     5205                                "title"
     5206                            ],
     5207                            "required": false
     5208                        }
     5209                    }
     5210                }
     5211            ]
     5212        },
     5213        "/wp/v2/template-parts/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/revisions/(?P<id>[\\d]+)": {
     5214            "namespace": "wp/v2",
     5215            "methods": [
     5216                "GET",
     5217                "DELETE"
     5218            ],
     5219            "endpoints": [
     5220                {
     5221                    "methods": [
     5222                        "GET"
     5223                    ],
     5224                    "args": {
     5225                        "parent": {
     5226                            "description": "The id of a template",
     5227                            "type": "string",
     5228                            "required": false
     5229                        },
     5230                        "id": {
     5231                            "description": "Unique identifier for the revision.",
     5232                            "type": "integer",
     5233                            "required": false
     5234                        },
     5235                        "context": {
     5236                            "description": "Scope under which the request is made; determines fields present in response.",
     5237                            "type": "string",
     5238                            "enum": [
     5239                                "view",
     5240                                "embed",
     5241                                "edit"
     5242                            ],
     5243                            "default": "view",
     5244                            "required": false
     5245                        }
     5246                    }
     5247                },
     5248                {
     5249                    "methods": [
     5250                        "DELETE"
     5251                    ],
     5252                    "args": {
     5253                        "parent": {
     5254                            "description": "The id of a template",
     5255                            "type": "string",
     5256                            "required": false
     5257                        },
     5258                        "id": {
     5259                            "description": "Unique identifier for the revision.",
     5260                            "type": "integer",
     5261                            "required": false
     5262                        },
     5263                        "force": {
     5264                            "type": "boolean",
     5265                            "default": false,
     5266                            "description": "Required to be true, as revisions do not support trashing.",
     5267                            "required": false
     5268                        }
     5269                    }
     5270                }
     5271            ]
     5272        },
     5273        "/wp/v2/template-parts/(?P<id>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/autosaves": {
     5274            "namespace": "wp/v2",
     5275            "methods": [
     5276                "GET",
     5277                "POST"
     5278            ],
     5279            "endpoints": [
     5280                {
     5281                    "methods": [
     5282                        "GET"
     5283                    ],
     5284                    "args": {
     5285                        "id": {
     5286                            "description": "The id of a template",
     5287                            "type": "string",
     5288                            "required": false
     5289                        },
     5290                        "context": {
     5291                            "description": "Scope under which the request is made; determines fields present in response.",
     5292                            "type": "string",
     5293                            "enum": [
     5294                                "view",
     5295                                "embed",
     5296                                "edit"
     5297                            ],
     5298                            "default": "view",
     5299                            "required": false
     5300                        }
     5301                    }
     5302                },
     5303                {
     5304                    "methods": [
     5305                        "POST"
     5306                    ],
     5307                    "args": {
     5308                        "id": {
     5309                            "description": "The id of a template",
     5310                            "type": "string",
     5311                            "required": false
     5312                        },
     5313                        "slug": {
     5314                            "description": "Unique slug identifying the template.",
     5315                            "type": "string",
     5316                            "minLength": 1,
     5317                            "pattern": "[a-zA-Z0-9_\\%-]+",
     5318                            "required": false
     5319                        },
     5320                        "theme": {
     5321                            "description": "Theme identifier for the template.",
     5322                            "type": "string",
     5323                            "required": false
     5324                        },
     5325                        "type": {
     5326                            "description": "Type of template.",
     5327                            "type": "string",
     5328                            "required": false
     5329                        },
     5330                        "content": {
     5331                            "description": "Content of template.",
     5332                            "type": [
     5333                                "object",
     5334                                "string"
     5335                            ],
     5336                            "properties": {
     5337                                "raw": {
     5338                                    "description": "Content for the template, as it exists in the database.",
     5339                                    "type": "string",
     5340                                    "context": [
     5341                                        "view",
     5342                                        "edit"
     5343                                    ]
     5344                                },
     5345                                "block_version": {
     5346                                    "description": "Version of the content block format used by the template.",
     5347                                    "type": "integer",
     5348                                    "context": [
     5349                                        "edit"
     5350                                    ],
     5351                                    "readonly": true
     5352                                }
     5353                            },
     5354                            "required": false
     5355                        },
     5356                        "title": {
     5357                            "description": "Title of template.",
     5358                            "type": [
     5359                                "object",
     5360                                "string"
     5361                            ],
     5362                            "properties": {
     5363                                "raw": {
     5364                                    "description": "Title for the template, as it exists in the database.",
     5365                                    "type": "string",
     5366                                    "context": [
     5367                                        "view",
     5368                                        "edit",
     5369                                        "embed"
     5370                                    ]
     5371                                },
     5372                                "rendered": {
     5373                                    "description": "HTML title for the template, transformed for display.",
     5374                                    "type": "string",
     5375                                    "context": [
     5376                                        "view",
     5377                                        "edit",
     5378                                        "embed"
     5379                                    ],
     5380                                    "readonly": true
     5381                                }
     5382                            },
     5383                            "required": false
     5384                        },
     5385                        "description": {
     5386                            "description": "Description of template.",
     5387                            "type": "string",
     5388                            "required": false
     5389                        },
     5390                        "status": {
     5391                            "description": "Status of template.",
     5392                            "type": "string",
     5393                            "enum": [
     5394                                "publish",
     5395                                "future",
     5396                                "draft",
     5397                                "pending",
     5398                                "private"
     5399                            ],
     5400                            "required": false
     5401                        },
     5402                        "author": {
     5403                            "description": "The ID for the author of the template.",
     5404                            "type": "integer",
     5405                            "required": false
     5406                        },
     5407                        "area": {
     5408                            "description": "Where the template part is intended for use (header, footer, etc.)",
     5409                            "type": "string",
     5410                            "required": false
     5411                        }
     5412                    }
     5413                }
     5414            ]
     5415        },
     5416        "/wp/v2/template-parts/(?P<parent>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)/autosaves/(?P<id>[\\d]+)": {
     5417            "namespace": "wp/v2",
     5418            "methods": [
     5419                "GET"
     5420            ],
     5421            "endpoints": [
     5422                {
     5423                    "methods": [
     5424                        "GET"
     5425                    ],
     5426                    "args": {
     5427                        "parent": {
     5428                            "description": "The id of a template",
     5429                            "type": "string",
     5430                            "required": false
     5431                        },
     5432                        "id": {
     5433                            "description": "The ID for the autosave.",
     5434                            "type": "integer",
     5435                            "required": false
     5436                        },
     5437                        "context": {
     5438                            "description": "Scope under which the request is made; determines fields present in response.",
     5439                            "type": "string",
     5440                            "enum": [
     5441                                "view",
     5442                                "embed",
     5443                                "edit"
     5444                            ],
     5445                            "default": "view",
     5446                            "required": false
     5447                        }
     5448                    }
     5449                }
     5450            ]
     5451        },
     5452        "/wp/v2/template-parts": {
     5453            "namespace": "wp/v2",
     5454            "methods": [
     5455                "GET",
     5456                "POST"
     5457            ],
     5458            "endpoints": [
     5459                {
     5460                    "methods": [
     5461                        "GET"
     5462                    ],
     5463                    "args": {
     5464                        "context": {
     5465                            "description": "Scope under which the request is made; determines fields present in response.",
     5466                            "type": "string",
     5467                            "enum": [
     5468                                "view",
     5469                                "embed",
     5470                                "edit"
     5471                            ],
     5472                            "default": "view",
     5473                            "required": false
     5474                        },
     5475                        "wp_id": {
     5476                            "description": "Limit to the specified post id.",
     5477                            "type": "integer",
     5478                            "required": false
     5479                        },
     5480                        "area": {
     5481                            "description": "Limit to the specified template part area.",
     5482                            "type": "string",
     5483                            "required": false
     5484                        },
     5485                        "post_type": {
     5486                            "description": "Post type to get the templates for.",
     5487                            "type": "string",
     5488                            "required": false
     5489                        }
     5490                    }
     5491                },
     5492                {
     5493                    "methods": [
     5494                        "POST"
     5495                    ],
     5496                    "args": {
     5497                        "slug": {
     5498                            "description": "Unique slug identifying the template.",
     5499                            "type": "string",
     5500                            "minLength": 1,
     5501                            "pattern": "[a-zA-Z0-9_\\%-]+",
     5502                            "required": true
     5503                        },
     5504                        "theme": {
     5505                            "description": "Theme identifier for the template.",
     5506                            "type": "string",
     5507                            "required": false
     5508                        },
     5509                        "type": {
     5510                            "description": "Type of template.",
     5511                            "type": "string",
     5512                            "required": false
     5513                        },
     5514                        "content": {
     5515                            "default": "",
     5516                            "description": "Content of template.",
     5517                            "type": [
     5518                                "object",
     5519                                "string"
     5520                            ],
     5521                            "properties": {
     5522                                "raw": {
     5523                                    "description": "Content for the template, as it exists in the database.",
     5524                                    "type": "string",
     5525                                    "context": [
     5526                                        "view",
     5527                                        "edit"
     5528                                    ]
     5529                                },
     5530                                "block_version": {
     5531                                    "description": "Version of the content block format used by the template.",
     5532                                    "type": "integer",
     5533                                    "context": [
     5534                                        "edit"
     5535                                    ],
     5536                                    "readonly": true
     5537                                }
     5538                            },
     5539                            "required": false
     5540                        },
     5541                        "title": {
     5542                            "default": "",
     5543                            "description": "Title of template.",
     5544                            "type": [
     5545                                "object",
     5546                                "string"
     5547                            ],
     5548                            "properties": {
     5549                                "raw": {
     5550                                    "description": "Title for the template, as it exists in the database.",
     5551                                    "type": "string",
     5552                                    "context": [
     5553                                        "view",
     5554                                        "edit",
     5555                                        "embed"
     5556                                    ]
     5557                                },
     5558                                "rendered": {
     5559                                    "description": "HTML title for the template, transformed for display.",
     5560                                    "type": "string",
     5561                                    "context": [
     5562                                        "view",
     5563                                        "edit",
     5564                                        "embed"
     5565                                    ],
     5566                                    "readonly": true
     5567                                }
     5568                            },
     5569                            "required": false
     5570                        },
     5571                        "description": {
     5572                            "default": "",
     5573                            "description": "Description of template.",
     5574                            "type": "string",
     5575                            "required": false
     5576                        },
     5577                        "status": {
     5578                            "default": "publish",
     5579                            "description": "Status of template.",
     5580                            "type": "string",
     5581                            "enum": [
     5582                                "publish",
     5583                                "future",
     5584                                "draft",
     5585                                "pending",
     5586                                "private"
     5587                            ],
     5588                            "required": false
     5589                        },
     5590                        "author": {
     5591                            "description": "The ID for the author of the template.",
     5592                            "type": "integer",
     5593                            "required": false
     5594                        },
     5595                        "area": {
     5596                            "description": "Where the template part is intended for use (header, footer, etc.)",
     5597                            "type": "string",
     5598                            "required": false
     5599                        }
     5600                    }
     5601                }
     5602            ],
     5603            "_links": {
     5604                "self": [
     5605                    {
     5606                        "href": "http://example.org/index.php?rest_route=/wp/v2/template-parts"
     5607                    }
     5608                ]
     5609            }
     5610        },
     5611        "/wp/v2/template-parts/lookup": {
     5612            "namespace": "wp/v2",
     5613            "methods": [
     5614                "GET"
     5615            ],
     5616            "endpoints": [
     5617                {
     5618                    "methods": [
     5619                        "GET"
     5620                    ],
     5621                    "args": {
     5622                        "slug": {
     5623                            "description": "The slug of the template to get the fallback for",
     5624                            "type": "string",
     5625                            "required": true
     5626                        },
     5627                        "is_custom": {
     5628                            "description": "Indicates if a template is custom or part of the template hierarchy",
     5629                            "type": "boolean",
     5630                            "required": false
     5631                        },
     5632                        "template_prefix": {
     5633                            "description": "The template prefix for the created template. This is used to extract the main template type, e.g. in `taxonomy-books` extracts the `taxonomy`",
     5634                            "type": "string",
     5635                            "required": false
     5636                        }
     5637                    }
     5638                }
     5639            ],
     5640            "_links": {
     5641                "self": [
     5642                    {
     5643                        "href": "http://example.org/index.php?rest_route=/wp/v2/template-parts/lookup"
     5644                    }
     5645                ]
     5646            }
     5647        },
     5648        "/wp/v2/template-parts/(?P<id>([^\\/:<>\\*\\?\"\\|]+(?:\\/[^\\/:<>\\*\\?\"\\|]+)?)[\\/\\w%-]+)": {
     5649            "namespace": "wp/v2",
     5650            "methods": [
     5651                "GET",
     5652                "POST",
     5653                "PUT",
     5654                "PATCH",
     5655                "DELETE"
     5656            ],
     5657            "endpoints": [
     5658                {
     5659                    "methods": [
     5660                        "GET"
     5661                    ],
     5662                    "args": {
     5663                        "id": {
     5664                            "description": "The id of a template",
     5665                            "type": "string",
     5666                            "required": false
     5667                        },
     5668                        "context": {
     5669                            "description": "Scope under which the request is made; determines fields present in response.",
     5670                            "type": "string",
     5671                            "enum": [
     5672                                "view",
     5673                                "embed",
     5674                                "edit"
     5675                            ],
     5676                            "default": "view",
     5677                            "required": false
     5678                        }
     5679                    }
     5680                },
     5681                {
     5682                    "methods": [
     5683                        "POST",
     5684                        "PUT",
     5685                        "PATCH"
     5686                    ],
     5687                    "args": {
     5688                        "id": {
     5689                            "description": "The id of a template",
     5690                            "type": "string",
     5691                            "required": false
     5692                        },
     5693                        "slug": {
     5694                            "description": "Unique slug identifying the template.",
     5695                            "type": "string",
     5696                            "minLength": 1,
     5697                            "pattern": "[a-zA-Z0-9_\\%-]+",
     5698                            "required": false
     5699                        },
     5700                        "theme": {
     5701                            "description": "Theme identifier for the template.",
     5702                            "type": "string",
     5703                            "required": false
     5704                        },
     5705                        "type": {
     5706                            "description": "Type of template.",
     5707                            "type": "string",
     5708                            "required": false
     5709                        },
     5710                        "content": {
     5711                            "description": "Content of template.",
     5712                            "type": [
     5713                                "object",
     5714                                "string"
     5715                            ],
     5716                            "properties": {
     5717                                "raw": {
     5718                                    "description": "Content for the template, as it exists in the database.",
     5719                                    "type": "string",
     5720                                    "context": [
     5721                                        "view",
     5722                                        "edit"
     5723                                    ]
     5724                                },
     5725                                "block_version": {
     5726                                    "description": "Version of the content block format used by the template.",
     5727                                    "type": "integer",
     5728                                    "context": [
     5729                                        "edit"
     5730                                    ],
     5731                                    "readonly": true
     5732                                }
     5733                            },
     5734                            "required": false
     5735                        },
     5736                        "title": {
     5737                            "description": "Title of template.",
     5738                            "type": [
     5739                                "object",
     5740                                "string"
     5741                            ],
     5742                            "properties": {
     5743                                "raw": {
     5744                                    "description": "Title for the template, as it exists in the database.",
     5745                                    "type": "string",
     5746                                    "context": [
     5747                                        "view",
     5748                                        "edit",
     5749                                        "embed"
     5750                                    ]
     5751                                },
     5752                                "rendered": {
     5753                                    "description": "HTML title for the template, transformed for display.",
     5754                                    "type": "string",
     5755                                    "context": [
     5756                                        "view",
     5757                                        "edit",
     5758                                        "embed"
     5759                                    ],
     5760                                    "readonly": true
     5761                                }
     5762                            },
     5763                            "required": false
     5764                        },
     5765                        "description": {
     5766                            "description": "Description of template.",
     5767                            "type": "string",
     5768                            "required": false
     5769                        },
     5770                        "status": {
     5771                            "description": "Status of template.",
     5772                            "type": "string",
     5773                            "enum": [
     5774                                "publish",
     5775                                "future",
     5776                                "draft",
     5777                                "pending",
     5778                                "private"
     5779                            ],
     5780                            "required": false
     5781                        },
     5782                        "author": {
     5783                            "description": "The ID for the author of the template.",
     5784                            "type": "integer",
     5785                            "required": false
     5786                        },
     5787                        "area": {
     5788                            "description": "Where the template part is intended for use (header, footer, etc.)",
     5789                            "type": "string",
     5790                            "required": false
     5791                        }
     5792                    }
     5793                },
     5794                {
     5795                    "methods": [
     5796                        "DELETE"
     5797                    ],
     5798                    "args": {
     5799                        "id": {
     5800                            "description": "The id of a template",
     5801                            "type": "string",
     5802                            "required": false
     5803                        },
     5804                        "force": {
     5805                            "type": "boolean",
     5806                            "default": false,
     5807                            "description": "Whether to bypass Trash and force deletion.",
     5808                            "required": false
     5809                        }
     5810                    }
     5811                }
     5812            ]
     5813        },
     5814        "/wp/v2/navigation": {
     5815            "namespace": "wp/v2",
     5816            "methods": [
     5817                "GET",
     5818                "POST"
     5819            ],
     5820            "endpoints": [
     5821                {
     5822                    "methods": [
     5823                        "GET"
     5824                    ],
     5825                    "allow_batch": {
     5826                        "v1": true
     5827                    },
     5828                    "args": {
     5829                        "context": {
     5830                            "description": "Scope under which the request is made; determines fields present in response.",
     5831                            "type": "string",
     5832                            "enum": [
     5833                                "view",
     5834                                "embed",
     5835                                "edit"
     5836                            ],
     5837                            "default": "view",
     5838                            "required": false
     5839                        },
     5840                        "page": {
     5841                            "description": "Current page of the collection.",
     5842                            "type": "integer",
     5843                            "default": 1,
     5844                            "minimum": 1,
     5845                            "required": false
     5846                        },
     5847                        "per_page": {
     5848                            "description": "Maximum number of items to be returned in result set.",
     5849                            "type": "integer",
     5850                            "default": 10,
     5851                            "minimum": 1,
     5852                            "maximum": 100,
     5853                            "required": false
     5854                        },
     5855                        "search": {
     5856                            "description": "Limit results to those matching a string.",
     5857                            "type": "string",
     5858                            "required": false
     5859                        },
     5860                        "after": {
     5861                            "description": "Limit response to posts published after a given ISO8601 compliant date.",
     5862                            "type": "string",
     5863                            "format": "date-time",
     5864                            "required": false
     5865                        },
     5866                        "modified_after": {
     5867                            "description": "Limit response to posts modified after a given ISO8601 compliant date.",
     5868                            "type": "string",
     5869                            "format": "date-time",
     5870                            "required": false
     5871                        },
     5872                        "before": {
     5873                            "description": "Limit response to posts published before a given ISO8601 compliant date.",
     5874                            "type": "string",
     5875                            "format": "date-time",
     5876                            "required": false
     5877                        },
     5878                        "modified_before": {
     5879                            "description": "Limit response to posts modified before a given ISO8601 compliant date.",
     5880                            "type": "string",
     5881                            "format": "date-time",
     5882                            "required": false
     5883                        },
     5884                        "exclude": {
     5885                            "description": "Ensure result set excludes specific IDs.",
     5886                            "type": "array",
     5887                            "items": {
     5888                                "type": "integer"
     5889                            },
     5890                            "default": [],
     5891                            "required": false
     5892                        },
     5893                        "include": {
     5894                            "description": "Limit result set to specific IDs.",
     5895                            "type": "array",
     5896                            "items": {
     5897                                "type": "integer"
     5898                            },
     5899                            "default": [],
     5900                            "required": false
     5901                        },
     5902                        "offset": {
     5903                            "description": "Offset the result set by a specific number of items.",
     5904                            "type": "integer",
     5905                            "required": false
     5906                        },
     5907                        "order": {
     5908                            "description": "Order sort attribute ascending or descending.",
     5909                            "type": "string",
     5910                            "default": "desc",
     5911                            "enum": [
     5912                                "asc",
     5913                                "desc"
     5914                            ],
     5915                            "required": false
     5916                        },
     5917                        "orderby": {
     5918                            "description": "Sort collection by post attribute.",
     5919                            "type": "string",
     5920                            "default": "date",
     5921                            "enum": [
     5922                                "author",
     5923                                "date",
     5924                                "id",
     5925                                "include",
     5926                                "modified",
     5927                                "parent",
     5928                                "relevance",
     5929                                "slug",
     5930                                "include_slugs",
     5931                                "title"
     5932                            ],
     5933                            "required": false
     5934                        },
     5935