구텐베르크가 현재 사용 중인지 확인


13

현재 사용중인 편집기가 WordPress 플러그인의 Gutenberg인지 어떻게 확인할 수 있습니까?

Gutenberg가 없기 때문에 이것이 필요하므로 post_submitbox_misc_actions현재 편집기가 Gutenberg 인 경우에만 사용되는 폴 백이 필요합니다.


function_exists (unested)를 가진 is_gutenberg_page ()와 같은 것을 의미합니까?
birgire

답변:


10

is_gutenberg_page()확인할 수 있도록, 구텐베르크를 활성화 할 때 존재하는 것입니다 기능 :

if( function_exists( 'is_gutenberg_page' ) )

Gutenberg가 활성화되어 있는지 확인하고 함수 자체는 현재 편집기가 Gutenberg를로드하도록 설정되어 있는지 확인합니다. 따라서 코드는 다음과 같습니다.

if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() )

물론 이것은 관리자 패널 페이지와 내부 데이터가 함수를 호출 할 준비가되었을 때 확인해야합니다. 따라서 적절한 hook을 사용하여 확인해야합니다 . 예를 들어, 후크를 사용하여 이것을 확인하면 작동하지 않습니다init .

Gutenberg 자체는 후크를 사용하여로드 된 is_gutenberg_page()함수에서 gutenberg_init()함수를 확인합니다 replace_editor. 따라서 replace_editor후크는이 검사를 수행하기에 좋은 장소입니다.

그러나 다음과 같은 admin_enqueue_scripts이유로 확인 을 위해 사용하는 것이 좋습니다 .

  1. admin_enqueue_scriptsis_gutenberg_page()구텐베르크가 동일한 점검을 수행 한 후 처음으로 발사되는 후크입니다 .

  2. 구텐베르크의 특성상 목적에 따라 외부 스크립트 / 스타일을로드 할 가능성이 높습니다.

  3. admin_enqueue_scripts잘 알려진 후크이며 관리자 패널 페이지에서만 시작됩니다. 따라서 프런트 엔드는 영향을받지 않습니다.

샘플 코드 (테스트) :

add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_test' );
function wpse_gutenberg_editor_test() {
    if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) { 
        // your gutenberg editor related CODE here
    }   
    else {
        // this is not gutenberg.
        // this may not even be any editor, you need to check the screen.
    }   
}

2
이 내용은 구텐베르크 플러그인과 협력, 그것은 wp5의 작품은 플러그인이 설치되지 않는 경우
막심 schoeni

1
is_block_editorwp5.0 +에 필요
Jacob Raccuia

5

함수 is_gutenberg_page 은 Gutenberg 플러그인에서 가져온 것이며 is_block_editor5.0에서 사용할 수 있습니다. 아래의이 기능은 단일 확인 기능으로 결합됩니다.

아래 코드는 Freemius SDK 에서 가져온 것입니다 .

function is_gutenberg_page() {
    if ( function_exists( 'is_gutenberg_page' ) &&
            is_gutenberg_page()
    ) {
        // The Gutenberg plugin is on.
        return true;
    }
    $current_screen = get_current_screen();
    if ( method_exists( $current_screen, 'is_block_editor' ) &&
            $current_screen->is_block_editor()
    ) {
        // Gutenberg page on 5+.
        return true;
    }
    return false;
}

이것이 정답입니다.
Jacob Raccuia

3
  1. Gutenberg는 WordPress 5.0에 통합되었으며 이제 use_block_editor_for_post기능 을 사용하여 확인할 수 있습니다 .

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. 또는 새 게시물을 만들 때 use_block_editor_for_post_type기능을 사용 하여이 게시물 유형에 대해 gutenberg가 활성화되어 있는지 확인할 수 있습니다 .

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg is active.
    }

2

has_blocks 내용을 확인하는 방법이지만 관리 영역에서 블록 편집기 화면이 사용되고 있는지 확인하는 경우 새 블록 편집기와 Gutenberg 플러그인을 모두 고려하여 이와 같은 검사를 수행 할 수 있습니다. :

if (is_admin()) {
    global $current_screen;
    if (!isset($current_screen)) {$current_screen = get_current_screen();}
    if ( ( method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor() )
      || ( function_exists('is_gutenberg_page')) && is_gutenberg_page() ) ) {
        // DO SOMETHING HERE
    }
}

훌륭하지만 전화 할 필요는 없다고 생각합니다 global $current_screen.
Simon Cossar

사실, 나는 그들이 어떤 맥락에 있는지 알지 못하기 때문에 이런 식으로 예제를 코딩하는 경향이 있습니다-그것들에 따라 쉽게 깨질 수 있습니다 ... 나는 단지 추가 is_admin을 추가 하고이 목적을 위해 isset 검사를 추가했습니다.
majick

현재 WP 버전 (5.0.2)에서 위 스 니펫은 이후에 설정 되어 current_screen후크에 연결된 함수에서 실행될 때 작동하지 않습니다 is_block_editor. 나중에 실행되는 경우에만 작동합니다 (예 :) load-(page). 이것은 WP의 버그 인 것 같습니다.
marcochiesi

1

구텐베르크 3.6 기능이 좋아 도입 has_blocks하고 has_block. 더 이상 사용되지 않는 gutenberg_post_has_blocks기능을 대체합니다 .

경우 has_blocks구텐베르크보다 실제 수익률이 사용 된 포스트를 편집하는 동안.

전역이 이미 설정된 경우 (쿼리 루프와 같은 has_blocks()경우) 매개 변수없이 사용 $post하거나 게시 내용을 직접 확인하십시오.has_blocks( $content )


0

WP 5.0 이상에서 'has_blocks'함수가 /wp-includes/blocks.php에 있으므로 다음을 사용할 수 있습니다.

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.