带有响应图像的古腾堡自定义块
Gutenberg custom block with responsive images
我遵循了关于如何构建自定义 WordPress Gutenberg 块的教程:https://neliosoftware.com/blog/how-to-create-your-first-block-for-gutenberg/
第一个块很好,但我想在此块中使用自定义图像大小。此图像尺寸也应该是响应式的,这意味着在前端应该添加其他图像尺寸的 srcset 属性。
我在互联网上搜索了很长时间,但没有找到任何东西。使用来自 wordpress 的标准图像块或画廊块调整大小的图像,但对我来说,整个代码太复杂而无法理解,因为我还不习惯古腾堡编码方式...
是否有关于如何实现这一点的现有指南或代码示例?
最佳
卢卡斯
我在 this gutenberg github issue. The simple answer is, that wordpress (php) converts all images with the class name of wp-image-<id>
automatically responsive, using the wp_make_content_images_responsive 函数的帮助下找到了解决方案。
也就是说,您需要做的就是在 save
函数中将上述 class 名称添加到您的图像中。
应用于您提到的示例,它会类似于以下内容:
save: function( props ) {
var attributes = props.attributes;
var alignment = props.attributes.alignment;
var imageClass = 'wp-image-' + props.attributes.mediaId;
return (
el( 'div', { className: props.className },
attributes.mediaURL &&
el( 'div', { className: 'nelio-testimonial-image', style: { backgroundImage: 'url('+attributes.mediaURL+')' } },
el( 'img', { src: attributes.mediaURL, class: imageClass } ),
),
el( 'div', { className: 'nelio-testimonial-content', style: { textAlign: attributes.alignment } },
attributes.testimonial && el( 'p', {}, attributes.testimonial ),
el( 'p', { className: 'nelio-testimonial-name' }, attributes.name ),
attributes.position && el( 'p', { className: 'nelio-testimonial-position' }, attributes.position )
)
)
);
},
我遵循了关于如何构建自定义 WordPress Gutenberg 块的教程:https://neliosoftware.com/blog/how-to-create-your-first-block-for-gutenberg/
第一个块很好,但我想在此块中使用自定义图像大小。此图像尺寸也应该是响应式的,这意味着在前端应该添加其他图像尺寸的 srcset 属性。
我在互联网上搜索了很长时间,但没有找到任何东西。使用来自 wordpress 的标准图像块或画廊块调整大小的图像,但对我来说,整个代码太复杂而无法理解,因为我还不习惯古腾堡编码方式...
是否有关于如何实现这一点的现有指南或代码示例?
最佳 卢卡斯
我在 this gutenberg github issue. The simple answer is, that wordpress (php) converts all images with the class name of wp-image-<id>
automatically responsive, using the wp_make_content_images_responsive 函数的帮助下找到了解决方案。
也就是说,您需要做的就是在 save
函数中将上述 class 名称添加到您的图像中。
应用于您提到的示例,它会类似于以下内容:
save: function( props ) {
var attributes = props.attributes;
var alignment = props.attributes.alignment;
var imageClass = 'wp-image-' + props.attributes.mediaId;
return (
el( 'div', { className: props.className },
attributes.mediaURL &&
el( 'div', { className: 'nelio-testimonial-image', style: { backgroundImage: 'url('+attributes.mediaURL+')' } },
el( 'img', { src: attributes.mediaURL, class: imageClass } ),
),
el( 'div', { className: 'nelio-testimonial-content', style: { textAlign: attributes.alignment } },
attributes.testimonial && el( 'p', {}, attributes.testimonial ),
el( 'p', { className: 'nelio-testimonial-name' }, attributes.name ),
attributes.position && el( 'p', { className: 'nelio-testimonial-position' }, attributes.position )
)
)
);
},