diff --git a/packages/block-library/src/navigation/block.json b/packages/block-library/src/navigation/block.json index 2e116821ba996..54f2862d7233f 100644 --- a/packages/block-library/src/navigation/block.json +++ b/packages/block-library/src/navigation/block.json @@ -71,6 +71,13 @@ "templateLock": { "type": [ "string", "boolean" ], "enum": [ "all", "insert", "contentOnly", false ] + }, + "defaultBlock": { + "type": "object", + "default": { + "name": "core/navigation-link", + "attributes": {} + } } }, "providesContext": { diff --git a/packages/block-library/src/navigation/edit/index.js b/packages/block-library/src/navigation/edit/index.js index 6f629c20c0cfd..8108643b49fc3 100644 --- a/packages/block-library/src/navigation/edit/index.js +++ b/packages/block-library/src/navigation/edit/index.js @@ -97,6 +97,7 @@ function Navigation( { overlayMenu, showSubmenuIcon, templateLock, + defaultBlock, layout: { justifyContent, orientation = 'horizontal', @@ -858,6 +859,7 @@ function Navigation( { } templateLock={ templateLock } orientation={ orientation } + defaultBlock={ defaultBlock } /> ) } diff --git a/packages/block-library/src/navigation/edit/inner-blocks.js b/packages/block-library/src/navigation/edit/inner-blocks.js index 373acd1f52dfa..8537917397eee 100644 --- a/packages/block-library/src/navigation/edit/inner-blocks.js +++ b/packages/block-library/src/navigation/edit/inner-blocks.js @@ -25,6 +25,7 @@ export default function NavigationInnerBlocks( { hasCustomPlaceholder, orientation, templateLock, + defaultBlock, } ) { const { isImmediateParentOfSelectedBlock, @@ -88,6 +89,11 @@ export default function NavigationInnerBlocks( { const showPlaceholder = ! hasCustomPlaceholder && ! hasMenuItems && ! isSelected; + // If the `defaultBlock` attribute is set and itself has an attributes object with values then use it + // otherwise fallback to the DEFAULT_BLOCK constant. + // This allows site owners to set the default `core/navigation-link` variation to use. + const navDefaultBlock = defaultBlock?.attributes && Object.keys(defaultBlock.attributes).length > 0 ? defaultBlock : DEFAULT_BLOCK; + const innerBlocksProps = useInnerBlocksProps( { className: 'wp-block-navigation__container', @@ -98,7 +104,7 @@ export default function NavigationInnerBlocks( { onChange, allowedBlocks: ALLOWED_BLOCKS, prioritizedInserterBlocks: PRIORITIZED_INSERTER_BLOCKS, - defaultBlock: DEFAULT_BLOCK, + defaultBlock: navDefaultBlock, directInsert: shouldDirectInsert, orientation, templateLock,