перевірте, чи зараз Гутенберг використовується


13

Як я можу перевірити, чи редактор, який зараз використовується, - Гутенберг у плагіні WordPress?

Мені це потрібно тому, що не вистачає Гутенберга post_submitbox_misc_actions, тому мені потрібна резервна копія, яка використовуватиметься лише в тому випадку, якщо поточним редактором є Гутенберг.


Ви маєте на увазі, як is_gutenberg_page () з function_exists (неперевірений)?
birgire

Відповіді:


10

Існує is_gutenberg_page()функція, яка буде присутня при активації Гутенберга, тому ви можете перевірити:

if( function_exists( 'is_gutenberg_page' ) )

Це перевірятиметься, чи активовано Гутенберг, а сама функція перевірятиме, чи встановлений поточний редактор для завантаження Гутенберга. Таким чином КОД стає:

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

Звичайно, це потрібно перевірити на сторінках панелі адміністратора та коли внутрішні дані готові викликати функцію. Тож вам доведеться робити перевірку за допомогою відповідного гачка . Наприклад, якщо ви перевірите це за допомогою initгачка, воно не буде працювати .

Гутенберг сам перевіряє is_gutenberg_page()функцію з gutenberg_init()функції, яка завантажується за допомогою replace_editorгачка. Тож replace_editorгачок - гарне місце для проведення цієї перевірки.

Однак я б запропонував використовувати admin_enqueue_scriptsдля здійснення чека, оскільки:

  1. admin_enqueue_scriptsце перший гак, який вистрілюється після тієї ж is_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
Це працює лише з плагіном Gutenberg, він не працює в wp5, якщо плагін не встановлений
maxime scieni

1
is_block_editorпотрібно для wp5.0 +
Яків Раккуя

5

Функція is_gutenberg_pageвід плагіна Гутенберга, тоді як is_block_editorметод доступний від 5.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;
}

Це правильна відповідь, рухаючись вперед.
Яків Ракчуя

4
  1. Гутенберг був інтегрований у 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 це спосіб перейти до вмісту, але також зверніть увагу, якщо ви просто перевіряєте, чи використовується екран редактора блоків в області адміністрування, ви можете зробити перевірку так (щоб врахувати як новий редактор блоків, так і плагін Гутенберга) :

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.
Симон Коссар

правда, я схильний кодувати приклади таким чином, оскільки я не знаю, в якому контексті вони опиняться - вони можуть легко зламатися залежно від цього ... Я просто додав додатковий is_admin і перевірити набір для цієї мети.
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;
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.