diff --git a/packages/core-commands/src/site-editor-navigation-commands.js b/packages/core-commands/src/site-editor-navigation-commands.js
index f60a8af7d39a0..45d2dc6c47ad7 100644
--- a/packages/core-commands/src/site-editor-navigation-commands.js
+++ b/packages/core-commands/src/site-editor-navigation-commands.js
@@ -24,7 +24,7 @@ import { useIsTemplatesAccessible, useIsBlockBasedTheme } from './hooks';
import { unlock } from './lock-unlock';
import { orderEntityRecordsBySearch } from './utils/order-entity-records-by-search';
-const { useHistory } = unlock( routerPrivateApis );
+const { useHistory, useLocation } = unlock( routerPrivateApis );
const icons = {
post,
@@ -136,6 +136,14 @@ const getNavigationCommandLoaderPerPostType = ( postType ) =>
const getNavigationCommandLoaderPerTemplate = ( templateType ) =>
function useNavigationCommandLoader( { search } ) {
const history = useHistory();
+ const location = useLocation();
+
+ const isPatternsPage =
+ location?.params?.path === '/patterns' ||
+ location?.params?.postType === 'wp_block';
+ const didAccessPatternsPage =
+ !! location?.params?.didAccessPatternsPage;
+
const isBlockBasedTheme = useIsBlockBasedTheme();
const { records, isLoading } = useSelect( ( select ) => {
const { getEntityRecords } = select( coreStore );
@@ -184,6 +192,11 @@ const getNavigationCommandLoaderPerTemplate = ( templateType ) =>
const args = {
postType: templateType,
postId: record.id,
+ didAccessPatternsPage:
+ ! isBlockBasedTheme &&
+ ( isPatternsPage || didAccessPatternsPage )
+ ? 1
+ : undefined,
...extraArgs,
};
const targetUrl = addQueryArgs(
diff --git a/packages/edit-site/src/components/add-new-pattern/index.js b/packages/edit-site/src/components/add-new-pattern/index.js
index 32e677a6a39c3..79273de779dc4 100644
--- a/packages/edit-site/src/components/add-new-pattern/index.js
+++ b/packages/edit-site/src/components/add-new-pattern/index.js
@@ -11,6 +11,7 @@ import {
privateApis as editPatternsPrivateApis,
store as patternsStore,
} from '@wordpress/patterns';
+import { store as coreStore } from '@wordpress/core-data';
import { store as noticesStore } from '@wordpress/notices';
/**
@@ -19,7 +20,6 @@ import { store as noticesStore } from '@wordpress/notices';
import CreateTemplatePartModal from '../create-template-part-modal';
import SidebarButton from '../sidebar-button';
import { unlock } from '../../lock-unlock';
-import { store as editSiteStore } from '../../store';
import {
PATTERN_TYPES,
PATTERN_DEFAULT_CATEGORY,
@@ -36,9 +36,8 @@ export default function AddNewPattern() {
const [ showPatternModal, setShowPatternModal ] = useState( false );
const [ showTemplatePartModal, setShowTemplatePartModal ] =
useState( false );
- const isTemplatePartsMode = useSelect( ( select ) => {
- const settings = select( editSiteStore ).getSettings();
- return !! settings.supportsTemplatePartsMode;
+ const isBlockBasedTheme = useSelect( ( select ) => {
+ return select( coreStore ).getCurrentTheme()?.is_block_theme;
}, [] );
const { createPatternFromFile } = unlock( useDispatch( patternsStore ) );
const { createSuccessNotice, createErrorNotice } =
@@ -82,9 +81,7 @@ export default function AddNewPattern() {
},
];
- // Remove condition when command palette issues are resolved.
- // See: https://github.com/WordPress/gutenberg/issues/52154.
- if ( ! isTemplatePartsMode ) {
+ if ( isBlockBasedTheme ) {
controls.push( {
icon: symbolFilled,
onClick: () => setShowTemplatePartModal( true ),
diff --git a/packages/edit-site/src/components/page-template-parts/index.js b/packages/edit-site/src/components/page-template-parts/index.js
index f53ea6c10c554..2a8c41e333ce2 100644
--- a/packages/edit-site/src/components/page-template-parts/index.js
+++ b/packages/edit-site/src/components/page-template-parts/index.js
@@ -9,6 +9,7 @@ import {
import { __ } from '@wordpress/i18n';
import { useEntityRecords } from '@wordpress/core-data';
import { decodeEntities } from '@wordpress/html-entities';
+import { privateApis as routerPrivateApis } from '@wordpress/router';
/**
* Internal dependencies
@@ -20,8 +21,15 @@ import AddedBy from '../list/added-by';
import TemplateActions from '../template-actions';
import AddNewTemplatePart from './add-new-template-part';
import { TEMPLATE_PART_POST_TYPE } from '../../utils/constants';
+import { unlock } from '../../lock-unlock';
+
+const { useLocation } = unlock( routerPrivateApis );
export default function PageTemplateParts() {
+ const {
+ params: { didAccessPatternsPage },
+ } = useLocation();
+
const { records: templateParts } = useEntityRecords(
'postType',
TEMPLATE_PART_POST_TYPE,
@@ -40,8 +48,13 @@ export default function PageTemplateParts() {
params={ {
postId: templatePart.id,
postType: templatePart.type,
+ didAccessPatternsPage: !! didAccessPatternsPage
+ ? 1
+ : undefined,
+ } }
+ state={ {
+ backPath: '/wp_template_part/all',
} }
- state={ { backPath: '/wp_template_part/all' } }
>
{ decodeEntities(
templatePart.title?.rendered ||
diff --git a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js
index 14c137eed3791..70325f09bd21d 100644
--- a/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js
+++ b/packages/edit-site/src/components/sidebar-navigation-screen-patterns/index.js
@@ -10,6 +10,8 @@ import { useViewportMatch } from '@wordpress/compose';
import { getTemplatePartIcon } from '@wordpress/editor';
import { __ } from '@wordpress/i18n';
import { getQueryArgs } from '@wordpress/url';
+import { store as coreStore } from '@wordpress/core-data';
+import { useSelect } from '@wordpress/data';
import { file } from '@wordpress/icons';
/**
@@ -27,6 +29,7 @@ import {
import { useLink } from '../routes/link';
import usePatternCategories from './use-pattern-categories';
import useTemplatePartAreas from './use-template-part-areas';
+import { store as editSiteStore } from '../../store';
function TemplatePartGroup( { areas, currentArea, currentType } ) {
return (
@@ -93,8 +96,23 @@ export default function SidebarNavigationScreenPatterns() {
const { templatePartAreas, hasTemplateParts, isLoading } =
useTemplatePartAreas();
const { patternCategories, hasPatterns } = usePatternCategories();
+ const isBlockBasedTheme = useSelect(
+ ( select ) => select( coreStore ).getCurrentTheme()?.is_block_theme,
+ []
+ );
+ const isTemplatePartsMode = useSelect( ( select ) => {
+ const settings = select( editSiteStore ).getSettings();
+ return !! settings.supportsTemplatePartsMode;
+ }, [] );
+
+ const templatePartsLink = useLink( {
+ path: '/wp_template_part/all',
+ // If a classic theme that supports template parts accessed
+ // the Patterns page directly, preserve that state in the URL.
+ didAccessPatternsPage:
+ ! isBlockBasedTheme && isTemplatePartsMode ? 1 : undefined,
+ } );
- const templatePartsLink = useLink( { path: '/wp_template_part/all' } );
const footer = ! isMobileViewport ? (
{ __( 'Manage all of my patterns' ) }
-
- { __( 'Manage all template parts' ) }
-
+ { ( isBlockBasedTheme || isTemplatePartsMode ) && (
+
+ { __( 'Manage all template parts' ) }
+
+ ) }
) : undefined;
return (
{
- const settings = select( editSiteStore ).getSettings();
-
- return !! settings.supportsTemplatePartsMode;
+ return !! select( editSiteStore ).getSettings()
+ .supportsTemplatePartsMode;
}, [] );
return (