Cum să verifici dacă Gutenberg este activ în WordPress
Cum pot verifica dacă editorul folosit în prezent este Gutenberg într-un plugin WordPress?
Am nevoie de acest lucru deoarece Gutenberg nu are suport pentru post_submitbox_misc_actions
, așa că am nevoie de o soluție alternativă care să fie folosită doar dacă editorul curent este Gutenberg.

Funcții/Metode API necesare:
Vei avea nevoie de metoda WP_Screen::is_block_editor()
pentru a verifica dacă te afli în prezent în Editorul Gutenberg (începând cu WordPress 5.0).
De asemenea, dacă instalezi Gutenberg ca un plugin separat, atunci vei avea disponibilă funcția is_gutenberg_page()
pentru a face aceeași verificare.
Deci, pentru o soluție completă, va trebui să combini aceste două.
Desigur, acest lucru trebuie verificat din paginile panoului de administrare și când datele interne sunt pregătite pentru a apela funcția. Așadar, va trebui să faci verificarea folosind un hook potrivit. De exemplu, dacă verifici acest lucru folosind hook-ul init
, acesta nu va funcționa.
Gutenberg însuși verifică funcția is_gutenberg_page()
din funcția gutenberg_init()
, care este încărcată folosind hook-ul replace_editor
. Așadar, hook-ul replace_editor
este un loc bun pentru a face această verificare.
Cu toate acestea, aș sugera utilizarea hook-ului admin_enqueue_scripts
pentru a face verificarea, deoarece:
admin_enqueue_scripts
este primul hook care este declanșat după aceeași verificareis_gutenberg_page()
pe care Gutenberg o face el însuși.Datorită naturii Gutenberg, este mai probabil să încarci scripturi/stiluri externe pentru scopul tău.
admin_enqueue_scripts
este un hook bine cunoscut și este declanșat doar din paginile panoului de administrare. Astfel, frontend-ul nu este afectat de acesta.
Având în vedere cele de mai sus, dacă tot ce ai nevoie este să încarci niște scripturi/stiluri, atunci poți folosi hook-ul
enqueue_block_editor_assets
pentru resursele editorului șienqueue_block_assets
pentru resursele atât ale editorului, cât și ale frontend-ului (începând cu WordPress 5.0).Nu furnizez codul aferent aici deoarece nu a fost cerut direct în întrebare, dar poate fi suficient pentru majoritatea scopurilor.
Soluție:
Cod exemplu pentru verificarea Gutenberg
add_action( 'admin_enqueue_scripts', 'wpse_gutenberg_editor_action' );
function wpse_is_gutenberg_editor() {
if( function_exists( 'is_gutenberg_page' ) && is_gutenberg_page() ) {
return true;
}
$current_screen = get_current_screen();
if ( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() ) {
return true;
}
return false;
}
function wpse_gutenberg_editor_action() {
if( wpse_is_gutenberg_editor() ) {
// codul tău specific editorului Gutenberg aici
}
else {
// acesta nu este Gutenberg.
// poate să nu fie nici măcar un editor, trebuie să verifici ecranul dacă ai nevoie să verifici pentru un alt editor.
}
}

Aceasta funcționează doar cu plugin-ul Gutenberg, nu funcționează în wp5 dacă plugin-ul nu este instalat

Funcția is_gutenberg_page
face parte din plugin-ul Gutenberg, în timp ce metoda is_block_editor
este disponibilă începând cu versiunea 5.0. Funcția de mai jos combină ambele într-o singură funcție de verificare.
Codul de mai jos este preluat din Freemius SDK, mulțumiri echipei lor:
function is_gutenberg_page() {
if ( function_exists( 'is_gutenberg_page' ) &&
is_gutenberg_page()
) {
// Plugin-ul Gutenberg este activat.
return true;
}
$current_screen = get_current_screen();
if ( method_exists( $current_screen, 'is_block_editor' ) &&
$current_screen->is_block_editor()
) {
// Pagină Gutenberg pe versiunea 5+.
return true;
}
return false;
}

Gutenberg a fost integrat în WordPress 5.0 și acum poți verifica utilizând funcția
use_block_editor_for_post
.if(use_block_editor_for_post($post)){ //Editorul de blocuri este activ pentru acest articol. }
Alternativ, atunci când creezi un articol nou, poți folosi funcția
use_block_editor_for_post_type
pentru a verifica dacă Gutenberg este activ pentru acest tip de articol.if(use_block_editor_for_post_type($postType)){ //Gutenberg este activ. }

Varianta mea a fost https://pastebin.com/Fv3gYdhp

has_blocks
este metoda recomandată pentru a verifica conținutul, dar de asemenea rețineți că dacă doriți doar să verificați dacă în zona de administrare este folosit editorul de blocuri, puteți face o verificare astfel (pentru a lua în considerare atât noul editor de blocuri cât și plugin-ul 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() ) ) {
// FĂ CEVA AICI
}
}

Acest lucru este grozav, dar nu cred că este nevoie să apelezi global $current_screen
.

adevărat, tind să scriu exemplele de cod în acest fel pentru că nu știu în ce context vor fi folosite - ar putea eșua ușor în funcție de context... Tocmai am adăugat o verificare suplimentară is_admin și isset în acest scop.

În versiunea actuală de WP (5.0.2), fragmentul de cod de mai sus nu funcționează atunci când este executat într-o funcție atașată la hook-ul current_screen
deoarece is_block_editor
este setat mai târziu decât acesta. Funcționează doar dacă este executat la un moment ulterior (de ex. load-(page)
). Aceasta pare a fi o eroare în WP.

Obiectul WP_Screen
conține acum o proprietate booleană pentru aceasta. Următorul cod funcționează pentru mine:
if( ! function_exists( 'get_current_screen' ) ) {
return false;
}
$screen = get_current_screen();
$is_block_editor = $screen->is_block_editor;
Vezi https://developer.wordpress.org/reference/classes/wp_screen/is_block_editor/

Gutenberg 3.6 a introdus funcții precum has_blocks
și has_block
. Acestea înlocuiesc funcția depreciată gutenberg_post_has_blocks
.
Dacă has_blocks
returnează true, înseamnă că Gutenberg a fost folosit la editarea postării.
Puteți folosi fie has_blocks()
fără parametri dacă variabila globală $post
este deja setată (pentru ceva de genul unei bucle de interogare), fie puteți verifica direct conținutul postării cu has_blocks( $content )
.

Aici am împărtășit funcția personalizată pe care o poți folosi pentru a verifica dacă Gutenberg este activat sau nu.
if ( is_gutenberg_enable() ) {
// Scrieți codul dvs. aici
}
Aceasta este funcția personalizată:
/**
* Verifică dacă Gutenberg este activat.
* Trebuie utilizată nu mai devreme decât acțiunea plugins_loaded.
*
* @return bool
*/
function is_gutenberg_enable() {
$gutenberg = false;
$block_editor = false;
if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
// Gutenberg este instalat și activat.
$gutenberg = true;
}
if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
// Editorul de blocuri.
$block_editor = true;
}
if ( ! $gutenberg && ! $block_editor ) {
return false;
}
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if ( ! is_plugin_active( 'classic-editor/classic-editor.php' ) ) {
return true;
}
$use_block_editor = ( get_option( 'classic-editor-replace' ) === 'no-replace' );
return $use_block_editor;
}

Aceasta este una dintre ramificațiile ale scriptului kagg-design? Este cu adevărat o idee bună să incluzi plugin.php din wp-admin?

Este puțin diferit. Conform standardului, ar trebui să evităm plugin.php, dar în unele cazuri îl poți folosi dacă dorești. Aici l-am folosit pentru verificarea plugin-ului.

Verifică dacă Gutenberg este activ.
Nu apela clasa dacă ( zwp_is_block_editor() ) {
Eroare
if ( zwp_is_block_editor() ) {
class Auto_Save_Images_BLock_Editor
{
..............
}
new Auto_Save_Images_BLock_Editor();
}
Corect
if ( ! zwp_is_block_editor() ) {
class Auto_Save_Images_Classic_Editor
{
..............
}
new Auto_Save_Images_Classic_Editor();
}
if ( ! function_exists( 'zwp_is_block_editor' ) ) {
function zwp_is_block_editor() {
/
$screen = function_exists( 'get_current_screen' ) ? get_current_screen() : null;
$is_block_editor = $screen ? $screen->is_block_editor() : false;
if ( $is_block_editor ) {
// Do your block editor stuff here
return true;
} else {
// Do your classic editor stuff here
return false;
}
}
}
