Comment détecter l'utilisation de Gutenberg

8

Le nouvel éditeur appelé Gutenberg est ici en tant que plugin en 4.9, et en tant que fonctionnalité de base appelé Block Editor, en 5.0. En ce qui le concerne, il est souvent nécessaire de déterminer par programme quel éditeur est utilisé pour modifier le message ou la page dans la console du site. Comment faire?

Mise à jour: Il existe un certain nombre de réponses obsolètes à une question similaire:

Donc, avant de commenter cette question et réponse, veuillez prendre un travail pour vérifier ce que vous proposez. Vérifiez-le maintenant, avec la version 4.9 et la version actuelle de WordPress, et toutes les combinaisons possibles de Classic Editor et Gutenberg / Block Editor. Je serai heureux de discuter de la solution testée, pas des liens vers quelque chose.

KAGG Design
la source
add_action ('admin_enqueue_scripts', 'wpse_gutenberg_editor_test'); function wpse_gutenberg_editor_test () {if (function_exists ('is_gutenberg_page') && is_gutenberg_page ()) {// votre CODE associé à l'éditeur gutenberg ici} else {// ce n'est pas gutenberg. // ce n'est peut-être même pas un éditeur, vous devez vérifier l'écran. }}
vikrant zilpe
veuillez vérifier ceci: artiss.blog/2018/09/detecting-per-post-use-of-gutenberg
vikrant zilpe
et ce davidsword.ca/development/…
vikrant zilpe
2
@vikrantzilpe, ne vous fiez pas à des informations obsolètes. Il vaut mieux tester ce que vous écrivez. Par exemple, la the_gutenberg_project()fonction n'existe que dans le plugin Gutenberg, mais pas dans WP 5.0 Core.
KAGG Design
3
Copie de chèque
T.Todua

Réponses:

12

Il existe plusieurs variantes:

  • WordPress 4.9, le plugin Gutenberg n'est pas actif
  • WordPress 4.9, le plugin Gutenberg est actif
  • WordPress 5.0, éditeur de blocs par défaut
  • WordPress 5.0, le plugin Classic Editor est actif
  • WordPress 5.0, le plugin Classic Editor est actif, mais dans la console du site dans "Paramètres> Écriture" l'option "Utiliser l'éditeur de blocs par défaut ..." est sélectionnée

Toutes les variantes mentionnées peuvent être traitées par le code suivant:

/**
 * Check if Block Editor is active.
 * Must only be used after plugins_loaded action is fired.
 *
 * @return bool
 */
function is_active() {
    // Gutenberg plugin is installed and activated.
    $gutenberg = ! ( false === has_filter( 'replace_editor', 'gutenberg_init' ) );

    // Block editor since 5.0.
    $block_editor = version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' );

    if ( ! $gutenberg && ! $block_editor ) {
        return false;
    }

    if ( is_classic_editor_plugin_active() ) {
        $editor_option       = get_option( 'classic-editor-replace' );
        $block_editor_active = array( 'no-replace', 'block' );

        return in_array( $editor_option, $block_editor_active, true );
    }

    return true;
}

/**
 * Check if Classic Editor plugin is active.
 *
 * @return bool
 */
function is_classic_editor_plugin_active() {
    if ( ! function_exists( 'is_plugin_active' ) ) {
        include_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if ( is_plugin_active( 'classic-editor/classic-editor.php' ) ) {
        return true;
    }

    return false;
}

La fonction renvoie true si l'éditeur de blocs est actif par quelque moyen que ce soit, et false - dans le cas où l'éditeur classique est ici. Cette fonction ne doit être utilisée qu'après le plugins_loadeddéclenchement de l'action.

PS En raison de la sortie de la version 1.2 du plugin Classic Editor, le code est mis à jour, car les classic-editor-replaceoptions prennent désormais des valeurs non replaceet no-replace, mais classicet block.

KAGG Design
la source
ne va pas o downvote, mais ce n'est pas une réponse infaillible. Vous devez effectuer la détection en fonction des actions ou des filtres déclenchés, et non en fonction de l'existence d'un fichier ou d'une fonction. Il existe plusieurs façons de désactiver gutenberg et l'éditeur classique n'est que l'un d'entre eux.
Mark Kaplun
ou pour le dire différemment, vous ne devriez même jamais essayer de détecter si gutenberg est utilisé ou non, mais au lieu de cela, accrochez simplement toutes les fonctionnalités dont vous avez besoin sur les crochets gutenberg pertinents en plus de crocheter sur les crochets en tinymce
Mark Kaplun
1

Vous pouvez utiliser

add_action( 'enqueue_block_editor_assets', 'your_function_name' );

qui n'est déclenché que lors de l'édition de contenu avec Gutenberg.

Marc
la source
Ce code ne fonctionne que sur la page de l'éditeur.
KAGG Design
Et alors enqueue_block_assets?
Marc
has_action( 'enqueue_block_assets' )fait la même chose has_filter( 'replace_editor'dans mon code. Il retourne vrai si Classic Editor est actif et définit Classic Editor par défaut. Il vaut mieux vérifier ce que vous proposez avant d'écrire.
KAGG Design