Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Media Text Block: Image size option for featured image #67464

Open
wants to merge 21 commits into
base: trunk
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
b95ced3
Add resolution size support for featured image in media text block
akasunil Dec 2, 2024
e4d5dc8
Set selected size media url on media change
akasunil Dec 2, 2024
04d2a40
Unset useFeaturedImage on reset click
akasunil Dec 2, 2024
875912c
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 2, 2024
d32454f
Fix liniting errors
akasunil Dec 2, 2024
3e9bc8c
Update comment text
akasunil Dec 3, 2024
91dd5e1
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 3, 2024
2cc9a63
Use selected media size from setting
akasunil Dec 6, 2024
3f9ad85
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 6, 2024
2f09ae9
Fall back to default when selected size media not available
akasunil Dec 6, 2024
c2cd31f
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 6, 2024
c6bd669
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 9, 2024
0f552e2
Merge branch 'trunk' of github.com:WordPress/gutenberg into enhanceme…
akasunil Dec 10, 2024
fe9d482
Fix featured image default size issue
akasunil Dec 10, 2024
cc6335e
Resolved conflict and sync with trunk
akasunil Jan 3, 2025
bcf98e1
Merge branch 'trunk' of personal.github.com:WordPress/gutenberg into …
akasunil Feb 4, 2025
7dd813a
Merge branch 'trunk' of personal.github.com:WordPress/gutenberg into …
akasunil Feb 4, 2025
8a055e6
Merge branch 'trunk' of personal.github.com:WordPress/gutenberg into …
akasunil Feb 18, 2025
f1d149a
Fix mediaSizeSlug variable error
akasunil Feb 18, 2025
99b555e
Fix duplicate image variable error
akasunil Feb 18, 2025
cac6d0b
Fix featured image default size issue
akasunil Feb 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 39 additions & 12 deletions packages/block-library/src/media-text/edit.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ function getImageSourceUrlBySizeSlug( image, slug ) {
}

function attributesFromMedia( {
attributes: { linkDestination, href },
attributes: { linkDestination, href, mediaSizeSlug },
setAttributes,
} ) {
return ( media ) => {
Expand Down Expand Up @@ -102,11 +102,10 @@ function attributesFromMedia( {
}

if ( mediaType === 'image' ) {
// Try the "large" size URL, falling back to the "full" size URL below.
// Get the URL for the selected image size, falling back to the full size.
src =
media.sizes?.large?.url ||
// eslint-disable-next-line camelcase
media.media_details?.sizes?.large?.source_url;
media.sizes?.[ mediaSizeSlug ]?.url ||
media?.media_details?.sizes?.[ mediaSizeSlug ]?.source_url;
}

let newHref = href;
Expand All @@ -126,6 +125,8 @@ function attributesFromMedia( {
mediaId: media.id,
mediaType,
mediaUrl: src || media.url,
// Reset to default size if the selected size is not available in media.
mediaSizeSlug: src ? mediaSizeSlug : DEFAULT_MEDIA_SIZE_SLUG,
mediaLink: media.link || undefined,
href: newHref,
focalPoint: undefined,
Expand Down Expand Up @@ -179,8 +180,8 @@ function MediaTextEdit( {
mediaPosition,
mediaType,
mediaUrl,
mediaWidth,
mediaSizeSlug,
mediaWidth,
rel,
verticalAlignment,
allowedBlocks,
Expand Down Expand Up @@ -223,13 +224,27 @@ function MediaTextEdit( {
);

const featuredImageURL = useFeaturedImage
? featuredImageMedia?.source_url
? featuredImageMedia?.media_details?.sizes?.[ mediaSizeSlug ]
?.source_url ?? featuredImageMedia?.source_url
: '';

const featuredMediaSizeSlug =
useFeaturedImage &&
featuredImageMedia?.media_details?.sizes?.[ mediaSizeSlug ]?.source_url
? mediaSizeSlug
: DEFAULT_MEDIA_SIZE_SLUG;

const featuredImageAlt = useFeaturedImage
? featuredImageMedia?.alt_text
: '';

const toggleUseFeaturedImage = () => {
const updateMediaSize =
! useFeaturedImage &&
featuredImageMedia?.media_details?.sizes?.[ mediaSizeSlug ]
? mediaSizeSlug
: DEFAULT_MEDIA_SIZE_SLUG;

setAttributes( {
imageFill: false,
mediaType: 'image',
Expand All @@ -242,6 +257,7 @@ function MediaTextEdit( {
linkClass: undefined,
rel: undefined,
href: undefined,
mediaSizeSlug: updateMediaSize,
useFeaturedImage: ! useFeaturedImage,
} );
};
Expand All @@ -255,7 +271,10 @@ function MediaTextEdit( {

const [ temporaryMediaWidth, setTemporaryMediaWidth ] = useState( null );

const onSelectMedia = attributesFromMedia( { attributes, setAttributes } );
const onSelectMedia = attributesFromMedia( {
attributes: { ...attributes, mediaSizeSlug },
setAttributes,
} );

const onSetHref = ( props ) => {
setAttributes( props );
Expand Down Expand Up @@ -293,8 +312,14 @@ function MediaTextEdit( {
const onVerticalAlignmentChange = ( alignment ) => {
setAttributes( { verticalAlignment: alignment } );
};

const currentImageMedia = useFeaturedImage ? featuredImageMedia : image;

const updateImage = ( newMediaSizeSlug ) => {
const newUrl = getImageSourceUrlBySizeSlug( image, newMediaSizeSlug );
const newUrl = getImageSourceUrlBySizeSlug(
currentImageMedia,
newMediaSizeSlug
);

if ( ! newUrl ) {
return null;
Expand Down Expand Up @@ -437,10 +462,12 @@ function MediaTextEdit( {
/>
</ToolsPanelItem>
) }
{ mediaType === 'image' && ! useFeaturedImage && (
{ mediaType === 'image' && (
<MediaTextResolutionTool
image={ image }
value={ mediaSizeSlug }
image={ useFeaturedImage ? featuredImageMedia : image }
value={
useFeaturedImage ? featuredMediaSizeSlug : mediaSizeSlug
}
onChange={ updateImage }
/>
) }
Expand Down
2 changes: 1 addition & 1 deletion packages/block-library/src/media-text/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function render_block_core_media_text( $attributes, $content ) {
update_post_thumbnail_cache();
}

$current_featured_image = get_the_post_thumbnail_url();
$current_featured_image = get_the_post_thumbnail_url( null, $attributes['mediaSizeSlug'] ?? null );
if ( ! $current_featured_image ) {
return $content;
}
Expand Down
1 change: 1 addition & 0 deletions packages/block-library/src/media-text/media-container.js
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ function MediaContainer( props, ref ) {
}
mediaId={ mediaId }
toggleUseFeaturedImage={ toggleUseFeaturedImage }
useFeaturedImage={ useFeaturedImage }
/>
{ ( mediaTypeRenderers[ mediaType ] || noop )() }
{ isTemporaryMedia && <Spinner /> }
Expand Down
18 changes: 10 additions & 8 deletions packages/block-library/src/media-text/save.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export default function save( { attributes } ) {
href,
linkTarget,
rel,
useFeaturedImage,
} = attributes;
const mediaSizeSlug = attributes.mediaSizeSlug || DEFAULT_MEDIA_SIZE_SLUG;
const newRel = ! rel ? undefined : rel;
Expand All @@ -46,14 +47,15 @@ export default function save( { attributes } ) {
? imageFillStyles( mediaUrl, focalPoint )
: {};

let image = mediaUrl ? (
<img
src={ mediaUrl }
alt={ mediaAlt }
className={ imageClasses || null }
style={ positionStyles }
/>
) : null;
let image =
! useFeaturedImage && mediaUrl ? (
<img
src={ mediaUrl }
alt={ mediaAlt }
className={ imageClasses || null }
style={ positionStyles }
/>
) : null;

if ( href ) {
image = (
Expand Down
Loading