kiểm tra xem Gutenberg hiện đang được sử dụng


13

Làm cách nào để kiểm tra xem trình soạn thảo hiện đang được sử dụng có phải là Gutenberg trong plugin WordPress không?

Tôi cần điều này bởi vì Gutenberg thiếu post_submitbox_misc_actions, vì vậy tôi cần một dự phòng sẽ chỉ được sử dụng nếu biên tập viên hiện tại là Gutenberg.


Bạn có nghĩa là như is_gutenberg_page () với function_exists (chưa được kiểm tra)?
bạch dương

Câu trả lời:


10

is_gutenberg_page()chức năng sẽ có mặt khi bạn kích hoạt Gutenberg, vì vậy bạn có thể kiểm tra:

if( function_exists( 'is_gutenberg_page' ) )

Điều này sẽ chỉ kiểm tra xem Gutenberg có được kích hoạt hay không và chính chức năng sẽ kiểm tra xem trình chỉnh sửa hiện tại có được thiết lập để tải Gutenberg hay không. Vì vậy, MÃ trở thành:

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

Tất nhiên, điều này phải được kiểm tra từ các trang của bảng quản trị và khi dữ liệu nội bộ sẵn sàng gọi chức năng. Vì vậy, bạn sẽ phải kiểm tra bằng cách sử dụng một cái móc phù hợp . Ví dụ: nếu bạn kiểm tra cái này bằng inithook, nó sẽ không hoạt động .

Gutenberg tự kiểm tra is_gutenberg_page()chức năng từ gutenberg_init()chức năng, được tải bằng replace_editorhook. Vì vậy, replace_editorhook là một nơi tốt để làm kiểm tra này.

Tuy nhiên, tôi khuyên bạn nên sử dụng admin_enqueue_scriptsđể thực hiện kiểm tra, vì:

  1. admin_enqueue_scriptslà cái móc đầu tiên được bắn ra sau cùng một is_gutenberg_page()tấm séc mà Gutenberg tự làm.

  2. Do bản chất của Gutenberg, bạn có nhiều khả năng tải các tập lệnh / kiểu bên ngoài cho mục đích của mình.

  3. admin_enqueue_scriptslà một hook nổi tiếng và nó chỉ được bắn từ các trang bảng quản trị. Vì vậy, kết thúc trước không bị ảnh hưởng bởi nó.

MÃ mẫu (đã kiểm tra):

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
Điều này chỉ hoạt động với plugin Gutenberg, nó không hoạt động trong wp5 nếu plugin không được cài đặt
maxime schoeni 17/11/18

1
is_block_editorđược yêu cầu cho wp5.0 +
Jacob Raccuia

5

Chức năng is_gutenberg_pagelà từ plugin Gutenberg, trong khi is_block_editorphương thức có sẵn từ 5.0. Chức năng này dưới đây kết hợp cả hai thành một chức năng kiểm tra duy nhất.

Mã dưới đây là từ Freemius SDK , đạo cụ cho nhóm của họ:

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;
}

Đây là câu trả lời chính xác di chuyển về phía trước.
Jacob Raccuia

3
  1. Gutenberg đã được tích hợp trong WordPress 5.0 và bây giờ bạn có thể kiểm tra bằng cách sử dụng use_block_editor_for_postchức năng.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Ngoài ra, khi tạo bài đăng mới, bạn có thể sử dụng use_block_editor_for_post_typechức năng để kiểm tra xem gutenberg có hoạt động cho loại bài đăng này không.

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

2

has_blocks là cách để kiểm tra nội dung, nhưng cũng lưu ý nếu bạn chỉ kiểm tra xem màn hình trình chỉnh sửa khối có đang được sử dụng trong khu vực quản trị hay không, bạn có thể thực hiện kiểm tra như thế này (để tính cả trình chỉnh sửa khối mới và plugin 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
    }
}

Điều này thật tuyệt, nhưng tôi không nghĩ bạn cần gọi global $current_screen.
Simon Cossar

đúng, tôi có xu hướng viết mã các ví dụ theo cách này vì tôi không biết chúng sẽ ở trong bối cảnh nào - chúng có thể dễ dàng phá vỡ tùy thuộc vào điều đó ... Tôi vừa thêm một kiểm tra is_admin bổ sung cho mục đích này.
Majick

Trong phiên bản WP hiện tại (5.0.2), đoạn trích trên không hoạt động khi được thực thi trong một chức năng gắn liền với current_screenhook vì is_block_editorđược đặt muộn hơn thế. Nó chỉ hoạt động nếu nó được thực thi sau đó (tức là load-(page)). Đây có vẻ là một lỗi trong WP.
marcochiesi

1

Gutenberg 3.6 giới thiệu các chức năng như has_blockshas_block. Họ thay thế các gutenberg_post_has_blockschức năng không dùng nữa .

Nếu has_blockstrả về đúng hơn Gutenberg đã được sử dụng trong khi chỉnh sửa bài.

Bạn có thể sử dụng has_blocks()mà không cần thông số nếu $posttoàn cầu đã được đặt (đối với nội dung như vòng lặp truy vấn) hoặc kiểm tra trực tiếp nội dung bài đăng vớihas_blocks( $content )


0

Trong WP 5.0 trở lên, một hàm 'has_blocks' có trong /wp-includes/blocks.php, vì vậy bạn có thể sử dụng:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.