diff --git a/packages/block-editor/src/components/provider/index.js b/packages/block-editor/src/components/provider/index.js index a4ebeed9ab2459..a31fae9524ddb0 100644 --- a/packages/block-editor/src/components/provider/index.js +++ b/packages/block-editor/src/components/provider/index.js @@ -148,10 +148,16 @@ export const ExperimentalBlockEditorProvider = withRegistryProvider( const settings = useMemo( () => { if ( isClientSideMediaEnabled && _settings?.mediaUpload ) { - // Create a new object so that the original props.settings.mediaUpload is not modified. + // Preserve the original server-side function. If _settings already + // has __unstableMediaUploadServer (from a parent provider), reuse it; + // otherwise use _settings.mediaUpload (the real function at root level). + const serverMediaUpload = + _settings.__unstableMediaUploadServer || + _settings.mediaUpload; return { ..._settings, mediaUpload: mediaUpload.bind( null, registry ), + __unstableMediaUploadServer: serverMediaUpload, }; } return _settings; diff --git a/packages/block-editor/src/components/provider/use-media-upload-settings.js b/packages/block-editor/src/components/provider/use-media-upload-settings.js index 7c00c145d27a72..49ae91ede72c0b 100644 --- a/packages/block-editor/src/components/provider/use-media-upload-settings.js +++ b/packages/block-editor/src/components/provider/use-media-upload-settings.js @@ -13,7 +13,8 @@ import { useMemo } from '@wordpress/element'; function useMediaUploadSettings( settings = {} ) { return useMemo( () => ( { - mediaUpload: settings.mediaUpload, + mediaUpload: + settings.__unstableMediaUploadServer || settings.mediaUpload, mediaSideload: settings.mediaSideload, maxUploadFileSize: settings.maxUploadFileSize, allowedMimeTypes: settings.allowedMimeTypes,