diff --git a/gutenberg.php b/gutenberg.php
index 6c3ab3681b2c9..c04d95ba3d035 100644
--- a/gutenberg.php
+++ b/gutenberg.php
@@ -65,16 +65,17 @@ function gutenberg_menu() {
'gutenberg_navigation_page'
);
}
- if ( array_key_exists( 'gutenberg-full-site-editing', get_option( 'gutenberg-experiments' ) ) ) {
- add_menu_page(
- __( 'Site Editor (beta)', 'gutenberg' ),
- __( 'Site Editor (beta)', 'gutenberg' ),
- 'edit_theme_options',
- 'gutenberg-edit-site',
- 'gutenberg_edit_site_page',
- 'dashicons-layout'
- );
- }
+ }
+
+ if ( gutenberg_is_fse_theme() ) {
+ add_menu_page(
+ __( 'Site Editor (beta)', 'gutenberg' ),
+ __( 'Site Editor (beta)', 'gutenberg' ),
+ 'edit_theme_options',
+ 'gutenberg-edit-site',
+ 'gutenberg_edit_site_page',
+ 'dashicons-layout'
+ );
}
if ( current_user_can( 'edit_posts' ) ) {
diff --git a/lib/blocks.php b/lib/blocks.php
index 4245d4cc14c7b..e1d334660af29 100644
--- a/lib/blocks.php
+++ b/lib/blocks.php
@@ -49,25 +49,20 @@ function gutenberg_reregister_core_block_types() {
),
'block_names' => array_merge(
array(
- 'archives.php' => 'core/archives',
- 'block.php' => 'core/block',
- 'calendar.php' => 'core/calendar',
- 'categories.php' => 'core/categories',
- 'cover.php' => 'core/cover',
- 'latest-comments.php' => 'core/latest-comments',
- 'latest-posts.php' => 'core/latest-posts',
- 'navigation.php' => 'core/navigation',
- 'navigation-link.php' => 'core/navigation-link',
- 'rss.php' => 'core/rss',
- 'search.php' => 'core/search',
- 'shortcode.php' => 'core/shortcode',
- 'social-link.php' => 'core/social-link',
- 'tag-cloud.php' => 'core/tag-cloud',
- ),
- ! gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' )
- ? array()
- :
- array(
+ 'archives.php' => 'core/archives',
+ 'block.php' => 'core/block',
+ 'calendar.php' => 'core/calendar',
+ 'categories.php' => 'core/categories',
+ 'cover.php' => 'core/cover',
+ 'latest-comments.php' => 'core/latest-comments',
+ 'latest-posts.php' => 'core/latest-posts',
+ 'navigation.php' => 'core/navigation',
+ 'navigation-link.php' => 'core/navigation-link',
+ 'rss.php' => 'core/rss',
+ 'search.php' => 'core/search',
+ 'shortcode.php' => 'core/shortcode',
+ 'social-link.php' => 'core/social-link',
+ 'tag-cloud.php' => 'core/tag-cloud',
'post-author.php' => 'core/post-author',
'post-comment.php' => 'core/post-comment',
'post-comment-author.php' => 'core/post-comment-author',
diff --git a/lib/experiments-page.php b/lib/experiments-page.php
index 03d94d3ebf441..208063729a7e1 100644
--- a/lib/experiments-page.php
+++ b/lib/experiments-page.php
@@ -51,17 +51,6 @@ function gutenberg_initialize_experiments_settings() {
'id' => 'gutenberg-navigation',
)
);
- add_settings_field(
- 'gutenberg-full-site-editing',
- __( 'Full Site Editing', 'gutenberg' ),
- 'gutenberg_display_experiment_field',
- 'gutenberg-experiments',
- 'gutenberg_experiments_section',
- array(
- 'label' => __( 'Enable Full Site Editing (Warning: A block-based theme is required for this experiment to work properly. We recommend using this only in a development environment.)', 'gutenberg' ),
- 'id' => 'gutenberg-full-site-editing',
- )
- );
register_setting(
'gutenberg-experiments',
'gutenberg-experiments'
@@ -109,10 +98,9 @@ function gutenberg_display_experiment_section() {
*/
function gutenberg_experiments_editor_settings( $settings ) {
$experiments_settings = array(
- '__experimentalEnableFullSiteEditing' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ),
+ '__unstableEnableFullSiteEditingBlocks' => gutenberg_is_fse_theme(),
);
-
- $gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) );
+ $gradient_presets = current( (array) get_theme_support( 'editor-gradient-presets' ) );
if ( false !== $gradient_presets ) {
$experiments_settings['gradients'] = $gradient_presets;
}
diff --git a/lib/full-site-editing.php b/lib/full-site-editing.php
new file mode 100644
index 0000000000000..2541aed693c57
--- /dev/null
+++ b/lib/full-site-editing.php
@@ -0,0 +1,30 @@
+
+
+ __( 'Template Parts', 'gutenberg' ),
'singular_name' => __( 'Template Part', 'gutenberg' ),
@@ -88,6 +92,10 @@ function gutenberg_filter_wp_template_part_wp_unique_post_slug( $slug, $post_ID,
* Fixes the label of the 'wp_template_part' admin menu entry.
*/
function gutenberg_fix_template_part_admin_menu_entry() {
+ if ( ! gutenberg_is_fse_theme() ) {
+ return;
+ }
+
global $submenu;
if ( ! isset( $submenu['themes.php'] ) ) {
return;
diff --git a/lib/templates.php b/lib/templates.php
index 878459f795cc8..406026bc59905 100644
--- a/lib/templates.php
+++ b/lib/templates.php
@@ -28,6 +28,10 @@ function gutenberg_get_template_paths() {
* Registers block editor 'wp_template' post type.
*/
function gutenberg_register_template_post_type() {
+ if ( ! gutenberg_is_fse_theme() ) {
+ return;
+ }
+
$labels = array(
'name' => __( 'Templates', 'gutenberg' ),
'singular_name' => __( 'Template', 'gutenberg' ),
@@ -124,6 +128,9 @@ function gutenberg_filter_wp_template_wp_unique_post_slug( $slug, $post_ID, $pos
* Fixes the label of the 'wp_template' admin menu entry.
*/
function gutenberg_fix_template_admin_menu_entry() {
+ if ( ! gutenberg_is_fse_theme() ) {
+ return;
+ }
global $submenu;
if ( ! isset( $submenu['themes.php'] ) ) {
return;
diff --git a/packages/block-editor/README.md b/packages/block-editor/README.md
index c6adb164ff4b1..5865e820d1d79 100644
--- a/packages/block-editor/README.md
+++ b/packages/block-editor/README.md
@@ -497,7 +497,6 @@ _Properties_
- _codeEditingEnabled_ `boolean`: Whether or not the user can switch to the code editor
- _\_\_experimentalCanUserUseUnfilteredHTML_ `boolean`: Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.
- _\_\_experimentalBlockDirectory_ `boolean`: Whether the user has enabled the Block Directory
-- _\_\_experimentalEnableFullSiteEditing_ `boolean`: Whether the user has enabled Full Site Editing
- _\_\_experimentalBlockPatterns_ `Array`: Array of objects representing the block patterns
- _\_\_experimentalBlockPatternCategories_ `Array`: Array of objects representing the block pattern categories
diff --git a/packages/block-editor/src/store/defaults.js b/packages/block-editor/src/store/defaults.js
index 20119e038a92b..8bbcbff537dbb 100644
--- a/packages/block-editor/src/store/defaults.js
+++ b/packages/block-editor/src/store/defaults.js
@@ -27,7 +27,6 @@ export const PREFERENCES_DEFAULTS = {
* @property {boolean} codeEditingEnabled Whether or not the user can switch to the code editor
* @property {boolean} __experimentalCanUserUseUnfilteredHTML Whether the user should be able to use unfiltered HTML or the HTML should be filtered e.g., to remove elements considered insecure like iframes.
* @property {boolean} __experimentalBlockDirectory Whether the user has enabled the Block Directory
- * @property {boolean} __experimentalEnableFullSiteEditing Whether the user has enabled Full Site Editing
* @property {Array} __experimentalBlockPatterns Array of objects representing the block patterns
* @property {Array} __experimentalBlockPatternCategories Array of objects representing the block pattern categories
*/
@@ -149,7 +148,6 @@ export const SETTINGS_DEFAULTS = {
availableLegacyWidgets: {},
__experimentalCanUserUseUnfilteredHTML: false,
__experimentalBlockDirectory: false,
- __experimentalEnableFullSiteEditing: false,
__mobileEnablePageTemplates: false,
__experimentalBlockPatterns: [],
__experimentalBlockPatternCategories: [],
diff --git a/packages/block-library/src/index.js b/packages/block-library/src/index.js
index 45d04f2a76c8b..b5b7493bef6f6 100644
--- a/packages/block-library/src/index.js
+++ b/packages/block-library/src/index.js
@@ -192,8 +192,7 @@ export const registerCoreBlocks = (
/**
* Function to register experimental core blocks depending on editor settings.
*
- * @param {Object} settings Editor settings.
- *
+ * @param {boolean} enableFSEBlocks Whether to enable the full site editing blocks.
* @example
* ```js
* import { __experimentalRegisterExperimentalCoreBlocks } from '@wordpress/block-library';
@@ -203,15 +202,13 @@ export const registerCoreBlocks = (
*/
export const __experimentalRegisterExperimentalCoreBlocks =
process.env.GUTENBERG_PHASE === 2
- ? ( settings ) => {
- const { __experimentalEnableFullSiteEditing } = settings;
-
+ ? ( enableFSEBlocks ) => {
[
navigation,
navigationLink,
// Register Full Site Editing Blocks.
- ...( __experimentalEnableFullSiteEditing
+ ...( enableFSEBlocks
? [
siteLogo,
siteTagline,
diff --git a/packages/block-library/src/site-logo/index.php b/packages/block-library/src/site-logo/index.php
index efadd3ce16c61..3b24c721a854b 100644
--- a/packages/block-library/src/site-logo/index.php
+++ b/packages/block-library/src/site-logo/index.php
@@ -43,16 +43,14 @@ function render_block_core_site_logo( $attributes ) {
* Registers the `core/site-logo` block on the server.
*/
function register_block_core_site_logo() {
- if ( gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ) ) {
- register_block_type_from_metadata(
- __DIR__ . '/site-logo',
- array(
- 'render_callback' => 'render_block_core_site_logo',
- )
- );
- add_filter( 'pre_set_theme_mod_custom_logo', 'sync_site_logo_to_theme_mod' );
- add_filter( 'theme_mod_custom_logo', 'override_custom_logo_theme_mod' );
- }
+ register_block_type_from_metadata(
+ __DIR__ . '/site-logo',
+ array(
+ 'render_callback' => 'render_block_core_site_logo',
+ )
+ );
+ add_filter( 'pre_set_theme_mod_custom_logo', 'sync_site_logo_to_theme_mod' );
+ add_filter( 'theme_mod_custom_logo', 'override_custom_logo_theme_mod' );
}
add_action( 'init', 'register_block_core_site_logo' );
diff --git a/packages/e2e-test-utils/src/themes.js b/packages/e2e-test-utils/src/themes.js
index 3a3bba83b27ca..64e4c96c0a09d 100644
--- a/packages/e2e-test-utils/src/themes.js
+++ b/packages/e2e-test-utils/src/themes.js
@@ -23,5 +23,10 @@ export async function activateTheme( slug ) {
}
const activateButton = await themeCard.$( '.button.activate' );
await activateButton.click();
+ await page.waitForFunction(
+ () =>
+ document.body &&
+ document.body.innerText.includes( 'New theme activated' )
+ );
await switchUserToTest();
}
diff --git a/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js b/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js
index 111b0e0ea0f59..3ed88faf4583f 100644
--- a/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js
+++ b/packages/e2e-tests/specs/experiments/multi-entity-editing.test.js
@@ -19,10 +19,7 @@ import { addQueryArgs } from '@wordpress/url';
/**
* Internal dependencies
*/
-import {
- useExperimentalFeatures,
- navigationPanel,
-} from '../../experimental-features';
+import { navigationPanel } from '../../experimental-features';
const visitSiteEditor = async () => {
const query = addQueryArgs( '', {
@@ -149,12 +146,10 @@ describe( 'Multi-entity editor states', () => {
const templatePartName = 'Test Template Part Name Edit';
const nestedTPName = 'Test Nested Template Part Name Edit';
- useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] );
-
beforeAll( async () => {
+ await activateTheme( 'twentytwentyone-blocks' );
await trashAllPosts( 'wp_template' );
await trashAllPosts( 'wp_template_part' );
- await activateTheme( 'twentytwentyone-blocks' );
} );
afterAll( async () => {
diff --git a/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js b/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js
index 36b999c38f8ca..fdbd0a22d7096 100644
--- a/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js
+++ b/packages/e2e-tests/specs/experiments/multi-entity-saving.test.js
@@ -14,10 +14,7 @@ import { addQueryArgs } from '@wordpress/url';
/**
* Internal dependencies
*/
-import {
- useExperimentalFeatures,
- navigationPanel,
-} from '../../experimental-features';
+import { navigationPanel } from '../../experimental-features';
describe( 'Multi-entity save flow', () => {
// Selectors - usable between Post/Site editors.
@@ -58,12 +55,10 @@ describe( 'Multi-entity save flow', () => {
}
};
- useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] );
-
beforeAll( async () => {
+ await activateTheme( 'twentytwentyone-blocks' );
await trashAllPosts( 'wp_template' );
await trashAllPosts( 'wp_template_part' );
- await activateTheme( 'twentytwentyone-blocks' );
} );
afterAll( async () => {
diff --git a/packages/e2e-tests/specs/experiments/template-part.test.js b/packages/e2e-tests/specs/experiments/template-part.test.js
index b94cf407d0b77..68d995a6b28f9 100644
--- a/packages/e2e-tests/specs/experiments/template-part.test.js
+++ b/packages/e2e-tests/specs/experiments/template-part.test.js
@@ -14,18 +14,13 @@ import { addQueryArgs } from '@wordpress/url';
/**
* Internal dependencies
*/
-import {
- useExperimentalFeatures,
- navigationPanel,
-} from '../../experimental-features';
+import { navigationPanel } from '../../experimental-features';
describe( 'Template Part', () => {
- useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] );
-
beforeAll( async () => {
+ await activateTheme( 'twentytwentyone-blocks' );
await trashAllPosts( 'wp_template' );
await trashAllPosts( 'wp_template_part' );
- await activateTheme( 'twentytwentyone-blocks' );
} );
afterAll( async () => {
await trashAllPosts( 'wp_template' );
diff --git a/packages/e2e-tests/specs/performance/site-editor.test.js b/packages/e2e-tests/specs/performance/site-editor.test.js
index 02ab516a255bf..f6331296aa122 100644
--- a/packages/e2e-tests/specs/performance/site-editor.test.js
+++ b/packages/e2e-tests/specs/performance/site-editor.test.js
@@ -4,11 +4,6 @@
import { basename, join } from 'path';
import { writeFileSync } from 'fs';
-/**
- * Internal dependencies
- */
-import { useExperimentalFeatures } from '../../experimental-features';
-
/**
* WordPress dependencies
*/
@@ -22,12 +17,10 @@ import { addQueryArgs } from '@wordpress/url';
jest.setTimeout( 1000000 );
describe( 'Site Editor Performance', () => {
- useExperimentalFeatures( [ '#gutenberg-full-site-editing' ] );
-
beforeAll( async () => {
+ await activateTheme( 'twentytwentyone-blocks' );
await trashAllPosts( 'wp_template' );
await trashAllPosts( 'wp_template_part' );
- await activateTheme( 'twentytwentyone-blocks' );
} );
afterAll( async () => {
await trashAllPosts( 'wp_template' );
diff --git a/packages/edit-navigation/src/index.js b/packages/edit-navigation/src/index.js
index 09516a1c99134..174d7f4b1272d 100644
--- a/packages/edit-navigation/src/index.js
+++ b/packages/edit-navigation/src/index.js
@@ -168,7 +168,7 @@ export function initialize( id, settings ) {
registerCoreBlocks();
if ( process.env.GUTENBERG_PHASE === 2 ) {
- __experimentalRegisterExperimentalCoreBlocks( settings );
+ __experimentalRegisterExperimentalCoreBlocks();
}
settings.__experimentalFetchLinkSuggestions = partialRight(
diff --git a/packages/edit-post/src/index.js b/packages/edit-post/src/index.js
index f93ece6ce7f23..a83aeb241d4b4 100644
--- a/packages/edit-post/src/index.js
+++ b/packages/edit-post/src/index.js
@@ -97,7 +97,9 @@ export function initializeEditor(
);
registerCoreBlocks();
if ( process.env.GUTENBERG_PHASE === 2 ) {
- __experimentalRegisterExperimentalCoreBlocks( settings );
+ __experimentalRegisterExperimentalCoreBlocks(
+ settings.__unstableEnableFullSiteEditingBlocks
+ );
}
// Show a console log warning if the browser is not in Standards rendering mode.
diff --git a/packages/edit-site/src/index.js b/packages/edit-site/src/index.js
index 7c040442e9b87..e3febadf3b7e2 100644
--- a/packages/edit-site/src/index.js
+++ b/packages/edit-site/src/index.js
@@ -61,7 +61,7 @@ export function initialize( id, settings ) {
registerCoreBlocks();
if ( process.env.GUTENBERG_PHASE === 2 ) {
- __experimentalRegisterExperimentalCoreBlocks( settings );
+ __experimentalRegisterExperimentalCoreBlocks( true );
}
render( , document.getElementById( id ) );
diff --git a/packages/edit-widgets/src/index.js b/packages/edit-widgets/src/index.js
index 6823343f6174f..303b4994a79ee 100644
--- a/packages/edit-widgets/src/index.js
+++ b/packages/edit-widgets/src/index.js
@@ -36,7 +36,7 @@ export function initialize( id, settings ) {
registerCoreBlocks( coreBlocks );
if ( process.env.GUTENBERG_PHASE === 2 ) {
- __experimentalRegisterExperimentalCoreBlocks( settings );
+ __experimentalRegisterExperimentalCoreBlocks();
}
registerBlock( createLegacyWidget( settings ) );
registerBlock( widgetArea );
diff --git a/packages/editor/src/components/provider/index.js b/packages/editor/src/components/provider/index.js
index 5f058cff6a73c..792a88d3a03ca 100644
--- a/packages/editor/src/components/provider/index.js
+++ b/packages/editor/src/components/provider/index.js
@@ -169,7 +169,6 @@ class EditorProvider extends Component {
'__experimentalBlockDirectory',
'__experimentalBlockPatterns',
'__experimentalBlockPatternCategories',
- '__experimentalEnableFullSiteEditing',
'__experimentalFeatures',
'__experimentalGlobalStylesUserEntityId',
'__experimentalGlobalStylesBaseStyles',
diff --git a/packages/editor/src/store/selectors.js b/packages/editor/src/store/selectors.js
index 764c3c63ba0e0..c4394cb0db56a 100644
--- a/packages/editor/src/store/selectors.js
+++ b/packages/editor/src/store/selectors.js
@@ -144,12 +144,6 @@ export const isEditedPostDirty = createRegistrySelector(
*/
export const hasNonPostEntityChanges = createRegistrySelector(
( select ) => ( state ) => {
- const enableFullSiteEditing = getEditorSettings( state )
- .__experimentalEnableFullSiteEditing;
- if ( ! enableFullSiteEditing ) {
- return false;
- }
-
const dirtyEntityRecords = select(
'core'
).__experimentalGetDirtyEntityRecords();
diff --git a/packages/editor/src/store/test/selectors.js b/packages/editor/src/store/test/selectors.js
index 4d6bf5f9a98dc..58cf8a795bef2 100644
--- a/packages/editor/src/store/test/selectors.js
+++ b/packages/editor/src/store/test/selectors.js
@@ -452,26 +452,9 @@ describe( 'selectors', () => {
} );
describe( 'hasNonPostEntityChanges', () => {
- it( 'should return false if the full site editing experiment is disabled.', () => {
- const state = {
- currentPost: { id: 1, type: 'post' },
- editorSettings: {
- __experimentalEnableFullSiteEditing: false,
- },
- __experimentalGetDirtyEntityRecords() {
- return [
- { kind: 'someKind', name: 'someName', key: 'someKey' },
- ];
- },
- };
- expect( hasNonPostEntityChanges( state ) ).toBe( false );
- } );
it( 'should return true if there are changes to an arbitrary entity', () => {
const state = {
currentPost: { id: 1, type: 'post' },
- editorSettings: {
- __experimentalEnableFullSiteEditing: true,
- },
__experimentalGetDirtyEntityRecords() {
return [
{ kind: 'someKind', name: 'someName', key: 'someKey' },
@@ -483,9 +466,6 @@ describe( 'selectors', () => {
it( 'should return false if there are only changes for the current post', () => {
const state = {
currentPost: { id: 1, type: 'post' },
- editorSettings: {
- __experimentalEnableFullSiteEditing: true,
- },
__experimentalGetDirtyEntityRecords() {
return [ { kind: 'postType', name: 'post', key: 1 } ];
},
@@ -495,9 +475,6 @@ describe( 'selectors', () => {
it( 'should return true if there are changes to multiple posts', () => {
const state = {
currentPost: { id: 1, type: 'post' },
- editorSettings: {
- __experimentalEnableFullSiteEditing: true,
- },
__experimentalGetDirtyEntityRecords() {
return [
{ kind: 'postType', name: 'post', key: 1 },
@@ -510,9 +487,6 @@ describe( 'selectors', () => {
it( 'should return true if there are changes to multiple posts of different post types', () => {
const state = {
currentPost: { id: 1, type: 'post' },
- editorSettings: {
- __experimentalEnableFullSiteEditing: true,
- },
__experimentalGetDirtyEntityRecords() {
return [
{ kind: 'postType', name: 'post', key: 1 },
diff --git a/test/integration/full-content/full-content.test.js b/test/integration/full-content/full-content.test.js
index 86f5f5c10e271..5e896387b5662 100644
--- a/test/integration/full-content/full-content.test.js
+++ b/test/integration/full-content/full-content.test.js
@@ -65,14 +65,11 @@ describe( 'full post content fixture', () => {
} )
);
unstable__bootstrapServerSideBlockDefinitions( blockDefinitions );
- const settings = {
- __experimentalEnableFullSiteEditing: true,
- };
// Load all hooks that modify blocks
require( '../../../packages/editor/src/hooks' );
registerCoreBlocks();
if ( process.env.GUTENBERG_PHASE === 2 ) {
- __experimentalRegisterExperimentalCoreBlocks( settings );
+ __experimentalRegisterExperimentalCoreBlocks( true );
}
} );