Make WordPress Core


Ignore:
Timestamp:
10/21/2025 01:40:28 PM (3 months ago)
Author:
ellatrix
Message:

Templates: add PHP changes required for the template activation feature.

  • Adds the active_templates setting, which is an object holding the template slug as a key and template post ID as the value.
  • To maintain backwards compatibility, any wp_template (post type) not created through the new API will be activated.
  • get_block_template and get_block_templates have been adjusted to check active_templates. These functions should never return inactive templates, just like before, to maintain backwards compatibility.
  • The pre-existing /templates endpoint and sub-endpoints remain and work exactly as before.
  • A new endpoint /wp_template has been added, but this is just a regular posts controller (WP_REST_Posts_Controller). We do register an additional theme field and expose the is_wp_suggestion meta.
  • Another new endpoint /wp_registered_template has been added, which is read-only and lists the registered templates from themes and plugin (un-edited, without activations applied).

These changes are to be iterated on.

See https://github.com/WordPress/wordpress-develop/pull/8063.

Props ellatrix, shailu25, ntsekouras.
Fixes #62755.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/wpRestTemplateAutosavesController.php

    r59970 r61029  
    590590        $autosave_db_post = get_post( $autosave_post_id );
    591591        $request          = new WP_REST_Request( 'GET', '/wp/v2/' . $rest_base . '/' . $template_id . '/autosaves/' . $autosave_db_post->ID );
    592         $controller       = new WP_REST_Template_Autosaves_Controller( $parent_post->post_type );
    593         $response         = $controller->prepare_item_for_response( $autosave_db_post, $request );
     592        // See create_initial_rest_routes. The controller need the post type
     593        // with adjusted settings to initialize.
     594        global $wp_post_types;
     595        $wp_post_types['wp_template']->rest_base                       = 'templates';
     596        $original_rest_controller_class                                = $wp_post_types['wp_template']->rest_controller_class;
     597        $original_revisions_rest_controller_class                      = $wp_post_types['wp_template']->revisions_rest_controller_class;
     598        $wp_post_types['wp_template']->rest_controller_class           = 'WP_REST_Templates_Controller';
     599        $wp_post_types['wp_template']->revisions_rest_controller_class = 'WP_REST_Template_Revisions_Controller';
     600        $wp_post_types['wp_template']->rest_controller                 = null;
     601        $wp_post_types['wp_template']->revisions_rest_controller       = null;
     602        $controller = new WP_REST_Template_Autosaves_Controller( $parent_post->post_type );
     603        $wp_post_types['wp_template']->rest_controller_class           = $original_rest_controller_class;
     604        $wp_post_types['wp_template']->revisions_rest_controller_class = $original_revisions_rest_controller_class;
     605        $wp_post_types['wp_template']->rest_base                       = 'wp_template';
     606        $response = $controller->prepare_item_for_response( $autosave_db_post, $request );
    594607        $this->assertInstanceOf(
    595608            WP_REST_Response::class,
Note: See TracChangeset for help on using the changeset viewer.