Cómo hacer que su complemento sea compatible con Gutenberg: Parte 2 (API de la barra lateral)

Si intenta hacer que su complemento sea compatible con Gutenberg, tiene algunas formas en que puede/debe viajar, dependiendo de lo que haga su complemento y cómo el usuario le da al usuario. En la primera parte de este mini-servicio, exploré el bloque API de Gutenberg, que es lo que la mayoría de los complementos necesitan compatibilidad con Gutenberg. Esta vez, exploraremos otra pieza de la API de la barra lateral del rompecabezas de Gutenberg-Gutenberg. Solo para asegurarnos de que estamos en la misma página, una explicación rápida:
La API de bloque de Gutenberg es muy extensa y le permite construir casi todo como bloques, pero a veces no es suficiente.
La API de la barra lateral, por otro lado, permite que los complementos graben una barra lateral donde puedan llevar su funcionalidad más allá de los bloques. La barra lateral es similar al inspector de bloques.

Cómo hacer que su complemento #WordPress sea compatible con #Gutenberg – Mastering Barbar #API
Haga clic en Tweet
Por ejemplo, la API de la barra lateral de Gutenberg en uso, como lo mostró Yoast SEO:

¿Dónde puedes usar la API de la barra lateral? Recientemente, trabajamos en la preparación de nuestro complemento – Revisión del producto WP – para Gutenberg. La revisión del producto de WP ha utilizado meta-play para agregar datos de revisión y no podríamos convertirnos en un bloque por varias razones de compatibilidad inversa. Por lo tanto, utilicé la API de la barra lateral.
Aquí está el bloque del complemento en el editor clásico:

Así es como integré la revisión de productos de WP en el editor Gutenberg:

Cuando los usuarios indican que la publicación es una revisión con un interruptor de barra lateral, podrán configurar todo sobre el cuadro de revisión en las opciones de la barra lateral.
La revisión del producto WP es uno de los ejemplos en los que la API de la barra lateral puede ser útil. Otro gran ejemplo es el complemento Drop It, que permite a los usuarios insertar imágenes de stock de Unsplash y Giphy usando la barra lateral. En esta publicación, lo guiaré a través del proceso de implementación de algo similar y de hacer su complemento compatible Gutenberg a través de la API de la barra lateral. Sube
Los meta cajas están algo listos para Gutenberg de forma predeterminada, pero ni siquiera comienzan con metaboxes. Tomemos un complemento que use un meta cuadro simple para proporcionar ciertas funcionalidades al usuario en la pantalla del editor.
Esto puede verse de la siguiente manera en el editor clásico:
Puede usar el siguiente código para crear dicha meta casilla; también está disponible en el almacén Hello Gutenberg:

/**
* Registre Hello Gutenbert Meta Box
*/
Hello_gutenberg_add_meta_box () función {
add_meta_box (‘Hello_gutenberg_meta_box’, __ (‘Hello Guttenberg Meta Box’, ‘Hello -Gutenberg’), ‘Hello_gutenberg_Metabox_Callback’, ‘Post’);
}
add_action (‘add_meta_boxes’, ‘hello_gutenberg_add_meta_box’);
/**
* Hola Gutenberg Metabox Callback
*/
Hello_gutenberg_metabox_callback ($ post) función {
$ valor = get_post_meta ($ post-> id, ‘_hello_gutenberg_field’, true);
?>

<input type = "text" name = "hello_gutenberg_field" value = "” />
false,
));
}
add_action (‘add_meta_boxes’, ‘hello_gutenberg_add_meta_box’);
El manual de Gutenberg tiene más detalles sobre cómo administrar PHP Metabox Porting a Gutenberg (aquí).
Esto asegurará que nuestras antiguas cajas Meta PHP ya no aparezcan en Gutenberg. Ahora tenemos que preparar nuestro meta campo para Gutenberg, agregándolo a WordPress REST API. Puede agregar el siguiente código para registrar el meta campo con la API REST: /**
* Grabe Hello Gutenberg Meta Field para REST API
*/
Hello_gutenberg_register_meta () function {
registro_meta (
“Publicar”, “_hello_gutenberg_field”, matrix (
‘Type’ => ‘string’,
“Solo” => verdadero,
‘Show_in_rest’ => verdadero,
)
);
}
add_action (‘init’, ‘hello_gutenberg_register_meta’); Esto agregará el campo _hello_gutenberg_field meta el objeto desde el resto.
Esta característica solo hará el trabajo para mostrar nuestro valor en la API REST. Ahora tenemos que agregar un método para actualizar nuestro meta campo utilizando la API REST. El siguiente código agregará nuestra ruta personalizada a WordPress REST API, que será/Hello-Gottenberg/V1/Update-Meta/::
/**
* Grabe Hello Gutenberg Metabox para REST API
*/
Hello_gutenberg_pi_posts_meta_field function () {
registrar_rest_route (
“Hello-Gutenberg/V1”, “/Update-Meta”, Matrix (
‘Métodos’ => ‘Post’,
‘callback’ => ‘hello_gutenberg_update_callback’, ‘args’ => matrix (
‘id’ => matriz (
‘SANITIZE_CALLBACK’ => ‘Ausente’,
),
),
)
);
}
add_action (‘REST_PI_INIT’, ‘Hello_gutenberg_api_posts_meta_field’);
/**
* Hello Gutenberg REST API Callback para Gutenberg
*/
Hello_gutenberg_update_callback function ($ data) {
devolver update_post_meta ($ data [‘id’], $ date [‘key’], $ date [‘value’]);
}
Esta ruta API REST se utilizará para cambiar nuestro campo de metal en la barra lateral de Gutenberg. Puede obtener más información sobre WordPress REST API y cómo registrar rutas personalizadas aquí.
Del mismo modo, si desea saber qué REST de WordPress es API y cómo comenzar, puede leer nuestro artículo de blog: WordPress REST API: Qué es y cómo comenzar a usarlo.
Subir
Agregar un bloque de barra lateral a Gutenberg para comenzar con el código de la barra lateral Gutenberg:
/**
* Bibliotecas de bloques internos
*/
const {__} = wp.i18n;
const {fragment} = wp. element;
const {
PluginsideBar,
Pluginsidebarmoremenitem,
} = wp.editpost;
const {registrePlogin} = wp.plugins;
Const componente = () => (

{__ (“Gutenberg Boilerplate”)}

{__ (“¡Buen mundo!”)}

);
RegisterPlogin (‘gutenberg-boilerplate’, {
icono: “Sitio administrativo”,
representación: componente,
});
Esto insertará una barra lateral muy simple en el editor de Gutenberg. Tomaremos esto como punto de partida y construiremos nuestro proyecto sobre su base.
El ejemplo del código es de nuestro almacén de Boilerplate Gutenberg y, por lo tanto, debemos reemplazar todas las apariencias “Gutenberg Boilerplate” con “Hello Gutenberg”. Los componentes utilizados, mientras que nuestra barra lateral ya importa muchos componentes, necesitaremos más. Puede reemplazar la parte superior del código con el siguiente:
/**
* Bibliotecas de bloques internos
*/
const {__} = wp.i18n;

const {
PluginsideBar,
Pluginsidebarmoremenitem
} = wp.editpost;
const {
Cuerpo de panel,
TextControl
} = wp.components;
const {
componente,
Fragmento
} = Wp.element;
Const {withselect} = wp.data;
const {registrePlogin} = wp.plugins; Averigüemos rápidamente sobre todos los componentes que importamos.
Como se discutió en el artículo anterior, el componente __ se usa para hacer que nuestro texto sea traducible.
El componente PluginSideBar se usa para agregar nuestra barra lateral a Gutenberg.
Pluginsidebarmoremenitem se usa para agregar un botón al menú Gutenberg, que cambia la visibilidad de la barra lateral.
El componente de la caramelo se usa para agregar un panel a nuestra barra lateral.
TextControl se utiliza para nuestro campo introductorio.
Después de eso, importé los componentes y los componentes del fragmento. Ambos son componentes React que usamos en nuestra barra lateral.
El componente de fragmentos se utiliza para agrupar una lista de niños sin agregar nudos adicionales al DOM. Necesitamos usar el componente de fragmentos en nuestro código, porque JSX no nos permite tener más de un nudo principal.
WithSelect es un componente de orden superior. Para averiguar cuáles son los componentes de orden superior, recomiendo leer esta documentación. Y, finalmente, importamos RegisterPugin, que es similar a RegistroBockType que utilizamos en el artículo anterior. En lugar de grabar un bloque, RegisterPugin registra su complemento.
Agregar controles hasta ahora, nuestra barra lateral es solo una función de componente, pero debido a que usaremos los métodos del ciclo de vida react, lo convertiremos en un componente React, de la siguiente manera:
Hello_gutenberg class extiende el componente {
ENVIAR () {
devolver (

{__ (“Hola Gutenberg”)}

{__ (“¡Buen mundo!”)}

)
}
}
RegisterPlogin (‘Hello-Gutenberg’, {
icono: “Sitio administrativo”,
RANDARE: Hello_Gutenberg,
});
Esto debería hacer que su barra lateral funcione con texto simple. Ahora agregemos nuestro campo a la barra lateral. Debería hacer que nuestro componente se vea así:
Hello_gutenberg class extiende el componente {
ENVIAR () {
devolver (

{__ (“Hola Gutenberg”)}

)
}
}
Esto agregará un campo de entrada simple a la barra lateral que no hará absolutamente nada en este momento. Ahora tenemos dos tareas:
Muestra el meta de nuestro campo.
Permite actualizar el valor de nuestro meta campo en la barra lateral.
Muestra el metaválogo para hacerse cargo de los metadatos, usaremos wp.apifetch. Apifetch es una biblioteca de servicios públicos que nos permite hacer solicitudes de descanso. Usaremos apifetch en el constructor de nuestro componente React, de la siguiente manera:
Hello_gutenberg class extiende el componente {
constructor () {
Super (… argumentos);
This.state = {
Clave: “_hello_gutenberg_field”,

valor: ”,
}
wp.apifetch ({ruta: `/wp/v2/posts/$ {this.props.postid}`, método: ‘get’) .then (
(data) => {
this.setsate ({
Valor: date.meta._hello_gutenberg_field
});
datos devueltos;
},
(er) => {
error de regreso;
}
);
}
ENVIAR () {
devolver (

{__ (“Hola Gutenberg”)}

)
}
}
En primer lugar, definimos un estado inicial, que es prácticamente la clave y el valor de nuestro campo. Después de eso, usamos Apifetch para tomar los datos de la publicación actual. Transmitimos la ID de nuestra publicación actual con la variable $ {this.props.postid}. Volveremos a este punto más tarde. Una vez que se toman los datos, actualizamos nuestro estado con el valor de nuestra API REST. Ahora, volvamos a la variable PostId. Actualmente no conocemos la ID de nuestra publicación actual, por lo que usamos el componente de orden superior, como sigue: const hoc = withlesect ((select) => {
const {getCurrentPostid} = select (‘core/editor’);
Devolver {
PostId: getCurrentPostid (),
};
}) (Hello_Gutenberg);
RegisterPlogin (‘Hello-Gutenberg’, {
icono: “Sitio administrativo”,
Renderización: hoc,
});
Esto pasará la identificación de nuestra publicación actual como una variable PostId. Ahora puede ejecutar una publicación más antigua, y nuestra barra lateral de Gutenberg mostrará el valor de su meta campo. Actualice el metavalore ahora debemos permitir que nuestra barra lateral actualice el meta valor. Similar a hacerse cargo de los detalles, utilizaremos la utilidad WP.Apirequest. Cada vez que cambia el valor de nuestra condición, lo actualizaremos con la API REST. Para esto, primero debemos agregar un evento TextControl Onchange de la siguiente manera: {
this.setsate ({
valor
});
}}
/> Y luego utilizaremos el método de ciclo de vida GetDerivedStateFrompts para enviar nuestro descanso. Puede agregar el siguiente código en su constructor:
static getDerivedStateFromProps (NextProps, State) {
wp.apirequest ({ruta: `/hello -gutenberg/v1/update -meta? id = $ {nextprops.postid}`, método: ‘post’, data: status}) .sen ((data) => {
datos devueltos;
},
(er) => {
error de regreso;
}
);
}
Esto actualizará nuestro meta campo cada vez que lo cambiemos desde el campo. Ahora debería ver un problema con este enfoque. El metáderile se actualizará cada vez que cambie el metavaloee, hay dos problemas con este enfoque:
Sus datos se guardarán incluso si decide no actualizar la publicación.
Hará una llamada HTTP con demasiada frecuencia, lo cual no es ideal.
Los datos deben guardar solo cuando guarde o publique la publicación. Para esto, podemos usar nuestro componente de orden superior para averiguar cuándo se guarda la publicación. Puede reemplazar nuestra función hoc con el siguiente código: const hoc = withlesect ((select, {forceissaving}) => {
const {
GetCurrentPostid,
Issavingpost,
Ispublishingpost,
IsutoSovingPost,
} = select (‘core/editor’);
Devolver {
PostId: getCurrentPostid (),
Issaving: Forceissaving || IssavingPost (),
Isutosaving: isautoaveavePost (),
Ispublishing: ispublishingPost (),
};
}) (Hello_Gutenberg); Esto nos dará algunas variables que podemos usar para verificar si nuestra publicación se guarda o publica. Necesitamos agregar esta condición a nuestra función posterior a la requisito:
static getDerivedStateFromProps (NextProps, State) {
If ((nextProps.ispublishing
wp.apirequest ({ruta: `/hello -gutenberg/v1/update -meta? id = $ {nextprops.postid}`, método: ‘post’, data: status}) (
(data) => {
datos devueltos;
},
(er) => {error de retorno;
}
);
}
}
Ahora el metavalor se actualizará solo cuando guardemos, actualicemos o publiquemos la publicación. ¡Eso es todo! ¡Su barra lateral está completa ahora y acaba de aprender a hacer que su complemento sea compatible con Gutenberg! Puede probar el bloque para asegurarse de que funcione. Si no, deje su respuesta en la sección de comentarios a continuación e intentaré ayudarlo.
Subir
¿Qué sigue cuando terminaste con la API de la barra lateral? Puede encontrar el ejemplo terminado en el almacén Hello Gutenberg. Si encuentra problemas, no dude en abrir un problema. Una vez más, este es un pequeño ejemplo de lo que es posible con la API de la barra lateral de Gutenberg. Hay muchas cosas sorprendentes que puedes crear con Gutenberg y sus API. Lectura adicional:
Un tutorial de Gutenberg para desarrolladores para principiantes
Cómo usar el nuevo editor de bloques de WordPress – Guía de WordPress Gutenberg
Hacer una “página de opción de arado” con componentes de Gutenberg
Vea otros tutoriales de la API: tome la API para principiantes API JavaScript Google Maps ¿Qué está tratando de obtener con Gutenberg? Haznos saber.
Cómo hacer que su complemento #WordPress sea compatible con #Gutenberg – Mastering Barbar #API
Haga clic en Tweet
… Recuerde unirse a nuestro curso rápido para acelerar su sitio de WordPress. Con algunos remedios simples, puede reducir el tiempo de carga incluso en 50-80%:

Copyright statement: Unless otherwise noted, this article is Collected from the Internet, please keep the source of the article when reprinting.

Check Also

gkOVSBm5B8SgiXmo

Shopify vs WooCommerce – ¿Cuál es la mejor plataforma?(Comparación)

Shopify vs WooCommerce

Leave a Reply

Your email address will not be published. Required fields are marked *