diff --git a/packages/block-editor/src/hooks/custom-fields.js b/packages/block-editor/src/hooks/custom-fields.js
index 31721569781b6..adb9df15824a7 100644
--- a/packages/block-editor/src/hooks/custom-fields.js
+++ b/packages/block-editor/src/hooks/custom-fields.js
@@ -34,6 +34,65 @@ function addAttribute( settings ) {
return settings;
}
+function CustomFieldsControl( props ) {
+ const blockEditingMode = useBlockEditingMode();
+ if ( blockEditingMode !== 'default' ) {
+ return null;
+ }
+
+ // If the block is a paragraph or image block, we need to know which
+ // attribute to use for the connection. Only the `content` attribute
+ // of the paragraph block and the `url` attribute of the image block are supported.
+ let attributeName;
+ if ( props.name === 'core/paragraph' ) attributeName = 'content';
+ if ( props.name === 'core/image' ) attributeName = 'url';
+
+ return (
+
+
+ {
+ if ( nextValue === '' ) {
+ props.setAttributes( {
+ connections: undefined,
+ [ attributeName ]: undefined,
+ placeholder: undefined,
+ } );
+ } else {
+ props.setAttributes( {
+ connections: {
+ attributes: {
+ // The attributeName will be either `content` or `url`.
+ [ attributeName ]: {
+ // Source will be variable, could be post_meta, user_meta, term_meta, etc.
+ // Could even be a custom source like a social media attribute.
+ source: 'meta_fields',
+ value: nextValue,
+ },
+ },
+ },
+ [ attributeName ]: undefined,
+ placeholder: sprintf(
+ 'This content will be replaced on the frontend by the value of "%s" custom field.',
+ nextValue
+ ),
+ } );
+ }
+ } }
+ />
+
+
+ );
+}
+
/**
* Override the default edit UI to include a new block inspector control for
* assigning a connection to blocks that has support for connections.
@@ -46,7 +105,6 @@ function addAttribute( settings ) {
*/
const withCustomFieldsControls = createHigherOrderComponent( ( BlockEdit ) => {
return ( props ) => {
- const blockEditingMode = useBlockEditingMode();
const hasCustomFieldsSupport = hasBlockSupport(
props.name,
'__experimentalConnections',
@@ -56,72 +114,17 @@ const withCustomFieldsControls = createHigherOrderComponent( ( BlockEdit ) => {
// Check if the current block is a paragraph or image block.
// Currently, only these two blocks are supported.
if ( ! [ 'core/paragraph', 'core/image' ].includes( props.name ) ) {
- return ;
+ return ;
}
- // If the block is a paragraph or image block, we need to know which
- // attribute to use for the connection. Only the `content` attribute
- // of the paragraph block and the `url` attribute of the image block are supported.
- let attributeName;
- if ( props.name === 'core/paragraph' ) attributeName = 'content';
- if ( props.name === 'core/image' ) attributeName = 'url';
-
- if ( hasCustomFieldsSupport && props.isSelected ) {
- return (
- <>
-
- { blockEditingMode === 'default' && (
-
-
- {
- if ( nextValue === '' ) {
- props.setAttributes( {
- connections: undefined,
- [ attributeName ]: undefined,
- placeholder: undefined,
- } );
- } else {
- props.setAttributes( {
- connections: {
- attributes: {
- // The attributeName will be either `content` or `url`.
- [ attributeName ]: {
- // Source will be variable, could be post_meta, user_meta, term_meta, etc.
- // Could even be a custom source like a social media attribute.
- source: 'meta_fields',
- value: nextValue,
- },
- },
- },
- [ attributeName ]: undefined,
- placeholder: sprintf(
- 'This content will be replaced on the frontend by the value of "%s" custom field.',
- nextValue
- ),
- } );
- }
- } }
- />
-
-
- ) }
- >
- );
- }
-
- return ;
+ return (
+ <>
+
+ { hasCustomFieldsSupport && props.isSelected && (
+
+ ) }
+ >
+ );
};
}, 'withCustomFieldsControls' );