vérifier si Gutenberg est actuellement utilisé

13

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

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

NerdOfLinux
la source
Voulez-vous dire comme is_gutenberg_page () avec function_exists (non testé)?
birgire

Réponses:

10

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

if( function_exists( 'is_gutenberg_page' ) )

Cela vérifiera seulement si Gutenberg est activé, et la fonction elle-même vérifiera si l'éditeur actuel est configuré pour charger Gutenberg. Le CODE devient donc:

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. Donc , vous devrez faire le contrôle à l' aide d' un crochet approprié . Par exemple, si vous vérifiez cela en utilisant le initcrochet, cela ne fonctionnera pas .

Gutenberg vérifie lui-même la is_gutenberg_page()fonction à partir de la gutenberg_init()fonction, qui est chargée à l'aide de replace_editorhook. Le replace_editorcrochet est donc un bon endroit pour effectuer cette vérification.

Cependant, je suggère l'utilisation de admin_enqueue_scriptspour effectuer le chèque, car:

  1. admin_enqueue_scriptsest le premier crochet qui est tiré après le même is_gutenberg_page()contrôle que Gutenberg fait lui-même.

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

  3. admin_enqueue_scriptsest un crochet bien connu et il est uniquement tiré depuis les pages du panneau d'administration. Donc, la partie avant n'en est pas affectée.

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.
    }   
}
Fayaz
la source
2
Cela ne fonctionne qu'avec le plugin Gutenberg, cela ne fonctionne pas dans wp5 si le plugin n'est pas installé
maxime schoeni
1
is_block_editorest requis pour wp5.0 +
Jacob Raccuia
5

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

Le code ci-dessous est de Freemius SDK , accessoires à 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;
}
Benjamin Intal
la source
C'est la bonne réponse pour aller de l'avant.
Jacob Raccuia
3
  1. Gutenberg a été intégré dans WordPress 5.0 et maintenant vous pouvez vérifier en utilisant la use_block_editor_for_postfonction.

    if(use_block_editor_for_post($post)){
      //Block editor is active for this post.
    }
  2. Alternativement, lors de la création d'un nouveau message, vous pouvez utiliser la use_block_editor_for_post_typefonction pour vérifier si gutenberg est actif pour ce type de message.

    if(use_block_editor_for_post_type($postType)){
    //Gutenberg is active.
    }
Ankit
la source
2

has_blocks est le chemin à parcourir pour vérifier le contenu, mais notez également que si vous vérifiez simplement si l'écran de l'éditeur de blocs est utilisé dans la zone d'administration, vous pouvez effectuer une vérification comme celle-ci (pour tenir compte à la fois du nouvel éditeur de blocs et du 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
    }
}
majick
la source
C'est super, mais je ne pense pas que vous ayez besoin d'appeler global $current_screen.
Simon Cossar
c'est vrai, j'ai tendance à coder les exemples de cette façon car je ne sais pas dans quel contexte ils seront - ils pourraient facilement se casser en fonction de cela ... Je viens d'ajouter une vérification is_admin et isset supplémentaire à cet effet.
majick
Dans la version actuelle de WP (5.0.2), l'extrait ci-dessus ne fonctionne pas lorsqu'il est exécuté dans une fonction attachée au current_screencrochet car il is_block_editorest défini plus tard. Cela ne fonctionne que s'il est exécuté ultérieurement (c'est-à-dire load-(page)). Cela semble être un bug dans WP.
marcochiesi
1

Gutenberg 3.6 a introduit des fonctions comme has_blockset has_block. Ils remplacent la gutenberg_post_has_blocksfonction obsolète .

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

Vous pouvez soit utiliser has_blocks()sans paramètres si le $postglobal est déjà défini (pour quelque chose comme une boucle de requête) ou vérifier le contenu du post directement avechas_blocks( $content )

Andrei
la source
0

Dans WP 5.0 et supérieur, une fonction 'has_blocks' est présente dans /wp-includes/blocks.php, vous pouvez donc utiliser:

    if ( function_exists('has_blocks')) {
        $this->isGutenberg = true;
    }
    else {
        $this->isGutenberg = false;
    }
Dragan Antonić
la source