핵심에 포함되기 전에 Gutenberg와 함께 놀고 있는데 기존 갤러리 블록을 확장하여 표시를 변경하는 방법을 알고 싶습니다. 예를 들어 썸네일 그리드 대신 이미지의 슬라이드 쇼를 보여주고 싶습니다. 가능합니까? 그렇다면 어떻게? 도움을 주시면 감사하겠습니다.
핵심에 포함되기 전에 Gutenberg와 함께 놀고 있는데 기존 갤러리 블록을 확장하여 표시를 변경하는 방법을 알고 싶습니다. 예를 들어 썸네일 그리드 대신 이미지의 슬라이드 쇼를 보여주고 싶습니다. 가능합니까? 그렇다면 어떻게? 도움을 주시면 감사하겠습니다.
답변:
좋아, 나는 이것을 조금 가지고 놀고 있었고 다음과 같은주의 사항으로 갤러리 블록의 출력을 변경했습니다.
@wordpress/hooks
코어에서 어떤 후크 시스템을 사용할 것인지에 대한 논의를 진행하고있다 .가장 먼저해야 할 일은 스크립트를 등록하는 것입니다. 이 작업 wp_enqueue_scripts()
은 enqueue_block_editor_assets
후크로 수행됩니다.
스크립트에는 wp-blocks
스크립트가 종속성으로 있어야합니다 . 에디터에 거의 이미로드되어 있지만 의존성으로 설정하면 스크립트보다 먼저로드됩니다.
function wpse_298225_enqueue_block_assets() {
wp_enqueue_script(
'wpse-298225-gallery-block',
get_theme_file_uri( 'block.js' ),
['wp-blocks']
);
}
add_action( 'enqueue_block_editor_assets', 'wpse_298225_enqueue_block_assets' );
블록의 출력을위한 HTML은 블록의 save()
방법으로 처리됩니다 . 이 파일 에서 갤러리 블록을 볼 수 있습니다 .
이 단계에서 (2018 년 3 월) 구텐베르크는 블록 저장 방법에 대한 필터를 지원합니다 blocks.getSaveElement
. 다음과 같이 JavaScript로 후크를 추가 할 수 있습니다.
wp.hooks.addFilter(
'blocks.getSaveElement',
'wpse-298225',
wpse298225GallerySaveElement
)
첫 번째 인수는 후크 이름이고 두 번째 인수는 네임 스페이스이며 마지막 인수는 콜백 함수입니다.
save()
블록 의 메소드를 대체하기 때문에 새로운 요소를 반환해야합니다. 그러나 이것은 반환해야 할 일반적인 HTML 요소가 아닙니다. React 요소 를 반환해야합니다 .
원래 블록의 save()
방법을 보면 JSX입니다. 구텐베르크가 기본적으로 사용하는 리 액트는 요소 렌더링을 지원합니다. 이에 대한 자세한 내용은 이 기사 를 참조하십시오 .
JSX에는 일반적으로 빌드 단계가 필요하지만이 예제에서는 빌드 단계를 소개하지 않으므로 JSX없이 요소를 작성하는 방법이 필요합니다. React는 이것을 제공합니다 createElement()
. WordPress는이 형식과 다른 반응 기능에 대한 래퍼를 형식으로 제공 wp.element
합니다. 그래서 createElement()
우리는 사용 wp.element.createElement()
합니다.
콜백 함수에서 blocks.getSaveElement
우리는 다음을 얻습니다.
element
블록에 의해 생성 된 원래 요소.blockType
사용중인 블록을 나타내는 객체입니다.attributes
블록 인스턴스의 속성. 이 예에서는 갤러리의 이미지와 열 수와 같은 설정이 포함됩니다.따라서 콜백 함수는 다음을 수행해야합니다.
다음은 ul
클래스가있는 각 이미지 에 대해 그리고 이미지 URL로 설정된 이미지마다 클래스, my-gallery
및을 사용 하여 a 를 출력하는 완전한 예제입니다 .li
my-gallery-item
img
src
function wpse298225GallerySaveElement( element, blockType, attributes ) {
if ( blockType.name !== 'core/gallery' ) {
return element;
}
var newElement = wp.element.createElement(
'ul',
{
'className': 'wp-block-gallery my-gallery',
},
attributes.images.map(
function( image ) {
return wp.element.createElement(
'li',
{
'className': 'blocks-gallery-item my-gallery-item',
},
wp.element.createElement(
'img',
{
'src': image.url,
}
)
)
}
)
)
return newElement
}
참고할 사항 :
ul.wp-block-gallery .blocks-gallery-item
므로이 마크 업과 해당 클래스는 블록을 편집하는 데 필요합니다. 이 마크 업은 기본 스타일에도 사용됩니다.attributes.images.map
각 이미지를 반복하고 하위 요소의 배열을 기본 요소의 내용으로 반환합니다. 이 요소들 안에는 이미지 자체를위한 또 다른 자식 요소가 있습니다.여기에 업데이트 된 답변이 제공됩니다. 내가 찾은 이 게시물은 매우 도움 갤러리 블록을 확장하는 방법의 질문에 대답한다.
요컨대, 기존을 확장하는 대신 새로운 블록을 만드는 것이 좋습니다. 위의 링크에있는 게시물에서 :
[확장하여] 블록의 HTML을 수정하면 원래 블록으로 인식되지 않습니다. 코어 블록을 조작하려고 시도하는 대신 코어 블록을 등록 취소하고 대신 새 대체 블록을 등록하는 것이 더 안전한 접근 방법 인 것처럼 보입니다. 이렇게하면 사이트 사용자가 특정 사용자 정의 갤러리를 사용하도록 보장 할 수 있습니다. 자체 HTML 구조를 정의합니다.
위의 링크 는 블록 생성을 시작하는 데 필요한 모든 것을 생성하는 명령 줄 도구 인 Create-Guten_Block 플러그인 도 참조 합니다. 이 도구는 사용하기 쉽고 설치가 쉽습니다.
이러한 리소스를 통해 짧은 시간에 사용자 정의 갤러리 블록을 개발하는 방법을 알아낼 수있었습니다