web-dev-qa-db-fra.com

vérifier si Gutenberg est actuellement utilisé

Comment puis-je vérifier si l'éditeur actuellement utilisé est Gutenberg dans un plugin WordPress?

J'ai besoin de cela parce que Gutenberg manque de post_submitbox_misc_actions, donc j'ai besoin d'une solution de secours qui ne sera utilisée que si l'éditeur actuel est Gutenberg.

12
NerdOfLinux

Il y a une fonction is_gutenberg_page() qui sera présente lorsque vous activerez Gutenberg, vous pourrez donc vérifier:

if( function_exists( 'is_gutenberg_page' ) )

Cela vérifiera uniquement si Gutenberg est activé et la fonction elle-même vérifiera si l'éditeur actuel est configuré pour charger Gutenberg. Alors le CODE devient:

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

Bien sûr, cela doit être vérifié à partir des pages du panneau d'administration et lorsque les données internes sont prêtes à appeler la fonction. Alors vous devrez faire la vérification en utilisant un crochet approprié . Par exemple, si vous cochez cette case en utilisantinithook, il ne fonctionnera pas .

Gutenberg vérifie lui-même la fonction is_gutenberg_page() à partir de la fonction gutenberg_init(), qui est chargée à l'aide du hook replace_editor. Donc, replace_editor hook est un bon endroit pour faire cette vérification.

Cependant, je suggérerais l'utilisation de admin_enqueue_scripts pour effectuer la vérification, car:

  1. admin_enqueue_scripts est le premier hook déclenché après la même vérification is_gutenberg_page() que Gutenberg effectue elle-même.

  2. En raison de la nature de Gutenberg, vous êtes plus susceptible de charger des scripts/styles externes pour vos besoins.

  3. admin_enqueue_scripts est un crochet bien connu et il est uniquement déclenché à partir des pages du panneau d'administration. Donc, le front-end n'en est pas affecté.

Exemple de code (testé):

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.
    }   
}
9
Fayaz

La fonction is_gutenberg_page provient du plugin Gutenberg, tandis que la méthode is_block_editor est disponible à partir de la version 5.0. Cette fonction ci-dessous combine les deux en une seule fonction de vérification.

Le code ci-dessous provient de Freemius SDK , les accessoires de leur équipe:

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;
}
5
Benjamin Intal
  1. Gutenberg a été intégré à WordPress 5.0 et vous pouvez maintenant vérifier en utilisant la fonction use_block_editor_for_post.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
    
  2. Lorsque vous créez un nouveau message, vous pouvez également utiliser la fonction use_block_editor_for_post_type pour vérifier si gutenberg est actif pour ce type de message.

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

has_blocks est le moyen d'aller vérifier le contenu, mais notez également que si vous vérifiez simplement si l'écran de l'éditeur de bloc est utilisé dans la zone d'administration, vous pouvez effectuer une vérification comme celle-ci (pour prendre en compte le nouvel éditeur de bloc et le 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
    }
}
2
majick

Gutenberg 3.6 introduit des fonctions telles que has_blocks et has_block. Ils remplacent la fonction obsolète gutenberg_post_has_blocks.

Si has_blocks renvoie vrai, Gutenberg a été utilisé lors de l'édition du message.

Vous pouvez utiliser has_blocks() sans paramètre si le $post global est déjà défini (pour une boucle semblable à une requête) ou vérifier le contenu de la publication directement avec has_blocks( $content ).

1
Andrei