From 39e3bc4667f41370f43a3e6ecc45af9b37b86082 Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Fri, 7 Feb 2025 15:54:00 +0400 Subject: [PATCH 1/4] REST API: Adds the site reading options to the index --- lib/compat/wordpress-6.8/preload.php | 3 +++ lib/compat/wordpress-6.8/rest-api.php | 15 +++++++++++++++ packages/core-data/src/entities.js | 3 +++ 3 files changed, 21 insertions(+) diff --git a/lib/compat/wordpress-6.8/preload.php b/lib/compat/wordpress-6.8/preload.php index 0e887fc081bcb5..a320e7f60afc83 100644 --- a/lib/compat/wordpress-6.8/preload.php +++ b/lib/compat/wordpress-6.8/preload.php @@ -51,6 +51,9 @@ function gutenberg_block_editor_preload_paths_6_8( $paths, $context ) { 'default_template_part_areas', 'default_template_types', 'url', + 'page_for_posts', + 'page_on_front', + 'show_on_front', ) ); $paths[] = '/wp/v2/templates/lookup?slug=front-page'; diff --git a/lib/compat/wordpress-6.8/rest-api.php b/lib/compat/wordpress-6.8/rest-api.php index fc68077b67f765..96bffbf45a2073 100644 --- a/lib/compat/wordpress-6.8/rest-api.php +++ b/lib/compat/wordpress-6.8/rest-api.php @@ -71,6 +71,21 @@ function gutenberg_add_default_template_types_to_index( WP_REST_Response $respon } add_filter( 'rest_index', 'gutenberg_add_default_template_types_to_index' ); +/** + * Adds the site reading options to the REST API index. + * + * @param WP_REST_Response $response REST API response. + * @return WP_REST_Response Modified REST API response. + */ +function gutenberg_add_rest_index_reading_options( WP_REST_Response $response ) { + $response->data['page_for_posts'] = (int) get_option( 'page_for_posts' ); + $response->data['page_on_front'] = (int) get_option( 'page_on_front' ); + $response->data['show_on_front'] = get_option( 'show_on_front' ); + + return $response; +} +add_filter( 'rest_index', 'gutenberg_add_rest_index_reading_options' ); + /** * Adds `ignore_sticky` parameter to the post collection endpoint. * diff --git a/packages/core-data/src/entities.js b/packages/core-data/src/entities.js index 2730cdf3d64bf4..a6d3335fa9583e 100644 --- a/packages/core-data/src/entities.js +++ b/packages/core-data/src/entities.js @@ -34,6 +34,9 @@ export const rootEntitiesConfig = [ 'default_template_part_areas', 'default_template_types', 'url', + 'page_for_posts', + 'page_on_front', + 'show_on_front', ].join( ',' ), }, // The entity doesn't support selecting multiple records. From 0fca1cce083f5984ab237d0b9d55caebd270b41b Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Fri, 7 Feb 2025 17:19:19 +0400 Subject: [PATCH 2/4] Preload unstable base all editors --- lib/compat/wordpress-6.8/preload.php | 40 ++++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/compat/wordpress-6.8/preload.php b/lib/compat/wordpress-6.8/preload.php index a320e7f60afc83..6a0102f1848eae 100644 --- a/lib/compat/wordpress-6.8/preload.php +++ b/lib/compat/wordpress-6.8/preload.php @@ -36,26 +36,6 @@ function gutenberg_block_editor_preload_paths_6_8( $paths, $context ) { $paths[] = '/wp/v2/settings'; $paths[] = array( '/wp/v2/settings', 'OPTIONS' ); - $paths[] = '/?_fields=' . implode( - ',', - // @see packages/core-data/src/entities.js - array( - 'description', - 'gmt_offset', - 'home', - 'name', - 'site_icon', - 'site_icon_url', - 'site_logo', - 'timezone_string', - 'default_template_part_areas', - 'default_template_types', - 'url', - 'page_for_posts', - 'page_on_front', - 'show_on_front', - ) - ); $paths[] = '/wp/v2/templates/lookup?slug=front-page'; $paths[] = '/wp/v2/templates/lookup?slug=home'; } @@ -93,6 +73,26 @@ function gutenberg_block_editor_preload_paths_6_8( $paths, $context ) { // Used by getBlockPatternCategories in useBlockEditorSettings. $paths[] = '/wp/v2/block-patterns/categories'; + $paths[] = '/?_fields=' . implode( + ',', + // @see packages/core-data/src/entities.js + array( + 'description', + 'gmt_offset', + 'home', + 'name', + 'site_icon', + 'site_icon_url', + 'site_logo', + 'timezone_string', + 'default_template_part_areas', + 'default_template_types', + 'url', + 'page_for_posts', + 'page_on_front', + 'show_on_front', + ) + ); } return $paths; } From 374ae57e21d84b09f317076a15d4769188de1c1c Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Tue, 11 Feb 2025 20:23:57 +0800 Subject: [PATCH 3/4] Update getTemplateId and related selectors --- packages/core-data/src/private-selectors.ts | 35 +++++---------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/packages/core-data/src/private-selectors.ts b/packages/core-data/src/private-selectors.ts index fb0401509694ef..153e5d3575caa6 100644 --- a/packages/core-data/src/private-selectors.ts +++ b/packages/core-data/src/private-selectors.ts @@ -6,12 +6,7 @@ import { createSelector, createRegistrySelector } from '@wordpress/data'; /** * Internal dependencies */ -import { - canUser, - getDefaultTemplateId, - getEntityRecord, - type State, -} from './selectors'; +import { getDefaultTemplateId, getEntityRecord, type State } from './selectors'; import { STORE_NAME } from './name'; import { unlock } from './lock-unlock'; @@ -139,16 +134,9 @@ interface SiteData { export const getHomePage = createRegistrySelector( ( select ) => createSelector( () => { - const canReadSiteData = select( STORE_NAME ).canUser( 'read', { - kind: 'root', - name: 'site', - } ); - if ( ! canReadSiteData ) { - return null; - } const siteData = select( STORE_NAME ).getEntityRecord( 'root', - 'site' + '__unstableBase' ) as SiteData | undefined; if ( ! siteData ) { return null; @@ -168,10 +156,7 @@ export const getHomePage = createRegistrySelector( ( select ) => return { postType: 'wp_template', postId: frontPageTemplateId }; }, ( state ) => [ - canUser( state, 'read', { - kind: 'root', - name: 'site', - } ) && getEntityRecord( state, 'root', 'site' ), + getEntityRecord( state, 'root', '__unstableBase' ), getDefaultTemplateId( state, { slug: 'front-page', } ), @@ -180,16 +165,10 @@ export const getHomePage = createRegistrySelector( ( select ) => ); export const getPostsPageId = createRegistrySelector( ( select ) => () => { - const canReadSiteData = select( STORE_NAME ).canUser( 'read', { - kind: 'root', - name: 'site', - } ); - if ( ! canReadSiteData ) { - return null; - } - const siteData = select( STORE_NAME ).getEntityRecord( 'root', 'site' ) as - | SiteData - | undefined; + const siteData = select( STORE_NAME ).getEntityRecord( + 'root', + '__unstableBase' + ) as SiteData | undefined; return siteData?.show_on_front === 'page' ? normalizePageId( siteData.page_for_posts ) : null; From 0b05f67ace48d4a2dd0d25b569e0c077bf9970a6 Mon Sep 17 00:00:00 2001 From: George Mamadashvili Date: Tue, 11 Feb 2025 21:47:20 +0800 Subject: [PATCH 4/4] Fix preloading e2e test --- test/e2e/specs/site-editor/preload.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/e2e/specs/site-editor/preload.spec.js b/test/e2e/specs/site-editor/preload.spec.js index e731e932e30523..b6f9f49aedeb7c 100644 --- a/test/e2e/specs/site-editor/preload.spec.js +++ b/test/e2e/specs/site-editor/preload.spec.js @@ -44,11 +44,11 @@ test.describe( 'Preload', () => { // To do: these should all be removed or preloaded. expect( requests ).toEqual( [ + // Seems to be coming from `enableComplementaryArea`. + '/wp/v2/users/me', // There are two separate settings OPTIONS requests. We should fix // so the one for canUser and getEntityRecord are reused. '/wp/v2/settings', - // Seems to be coming from `enableComplementaryArea`. - '/wp/v2/users/me', ] ); } ); } );