Creación de bloques para el editor de Gutenberg

En este módulo, le mostraremos cómo crear bloques para el editor de Gutenberg. Puede considerar los bloques como códigos cortos dinámicos que puede cambiar en vivo. Específicamente, en este artículo le mostraremos cómo crear la imagen con el bloque de texto como complemento para que pueda crear el modo de complemento para bloques. Antes de comenzar, le contaremos un poco sobre este editor. Gutenberg es el nombre del proyecto para el nuevo editor de bloques de WordPress, quien reemplazó el editor de WordPress Tinymce como un WordPress 5.0 predeterminado. El nuevo editor de WordPress presenta bloques y trae consigo un enfoque completamente diferente al contenido del contenido (de ahí el nombre …). Puede consultar la documentación principal de Gutenberg para registrar el bloque aquí.
Lo primero que haremos aquí es crear un archivo PHP con la clase ImageWithTextBlock y dentro de la clase definiremos un nuevo bloque con los estilos apropiados. Usamos clase debido a una mejor legibilidad del código y porque, en general, es nuestra forma favorita. También puede usar funciones en lugar de clase, donde llama a esa función en Init Hook.
‘Image-with-text-block-frontend style’,
));
}
}
ImageWithTextBlock :: get_instance ();
}
Primero hemos creado dos __construct () y el método estático get_instance (), utilizamos estos métodos para inicializar la clase en la que get_instance () hace la nueva instancia de esta clase y llamamos el método __construct (). Dentro del método __construct () definimos a qué métodos llamaremos durante la inicialización y, en nuestro caso, serán registrados_assets y registrar_block. El método de registro de activos (función) registra los archivos CSS y JavaScript que se utilizarán en Gutenberg Publisher y para la página. de front-end para este elemento de bloque. El primer block.js es el archivo más importante. Dentro de él crearemos toda la lógica y la funcionalidad de bloque. Puede usar el estilo del editor y los scripts de estilo front-end para que bloqueen ese bloqueo dentro del editor de Gutenberg y la página de front-end. Ahora comenzaremos desde el archivo block.js.
(función (bloques, editor, componentes, i18n, elemento) {
lima el = element.createement;
Var registroBlockType = blocks.registerBlockType;
Var richText = editor.RichText;
Lime blockControls = editor.blockControls;
var alignmentOtoolBar = editor.alignmentOtoolBar;
Lime MediaUpload = editor.mediaUpload;
Lime InspectorControls = Editor.SportorControls;
lima textControl = component.TextControl;
RegisterBlockType (‘My First-Bloc-Gotenberg/Image-With-Block’, {
Título: i18n .__ (‘Text with Text’, ‘First-My-My-Bloc-Gutenberg’),
Descripción: i18n .__ (‘Un bloque personalizado para mostrar la imagen con texto
icono: “id”,
Categoría: “Común”,
Atributo: {
MediaID: {
Teclea un número”
},
MediaURL: {
Tipo: “cadena”,
Fuente: “Atributo”,
Selector: ‘img’,
Atributo: ‘SRC’
},
Título: {
Teclee el texto”,
Selector: “H3″
},
Texto: {
Teclee el texto”,
Selector: ‘P’
},
Botón de texto: {
Teclee el texto”
},
ButtonUrl: {
Tipo: “URL”
},
Alineación: {
Tipo: “cadena”,
Por defecto: “Centro”
}
},
Editar: function (props) {
Var atributos = propos.attributes;
lima onselectimage = function (medios) {
Devuelve propuestas.sattributes ({
MediaURL: Media.URL,
MediaID: Media.id
})
};
devolver [
él (blockControls, {Key: ‘Controlle’},
él (‘div’, {
ClassName: ‘Components-Toolbar’
},
Él (Mediaupload, {
Onselect: onselectimage,
Tipo: “Imagen”,
Rendering: function (obj) {
devolver él (componentes.button, {
ClassName: “Componentes-icon-button componentes-toolbar__control”,
OnClick: obj.open
},
él (‘svg’, {classname: ‘pashicon dashicons-edition’, ancho: ’20’, altura: ’20’},
El (‘Cale’, {D: ‘M2.25 1H15.5C.69 0 1.25.56 1.25 1.25V15.5C0 .69-.56 1.25-1.25 1.25H2.25C1.56 19 1 18.45C1.56 19 1 18.451 V 1.56 1 2.25 1ZM17 17V3H3V14H14ZM10 6C0-1.1-.9-2-2S-2 .. 1H5C-.55 0-1-.45-1-1V8C2 0 3 4 3 4S1-3 3-3 3 2 3 2Z ‘} )
));
}
})
),
él (barra de herramientas de alineación, {
Valor: atributos. Alineación,
Onchange: function (NewAphment) {
propos.sattributes ({alineación: NewAphment})
}
})
),
Él (InspectORControls, {Key: ‘Inspector’},
él (componentes.panelbody, {
Título: i18n .__ (“Bloquear contenido”, “Primer block-gutenberg”),
ClassName: “Block-Contentent”,
Initialopen: verdadero
},
El (‘P
Él (TextControl, {
Teclee el texto”,
Etiqueta: i18n .__ (‘Texto de botón’, ‘my-forst-gutenberg-block’), valor: atributes.buttontext,
Onchange: function (newButTontext) {
propos.sattributes ({buttontext: newButTontext})
}
}),
Él (TextControl, {
Tipo: “URL”,
Etiqueta: i18n .__ (“URL de botón”, “my-forst-gutenberg-block”)
Valor: atributos.buttonurl,
Onchange: function (newButtonurl) {
propos.sattributes ({Buttonurl: NewButtonUrl})
}
})
)
),
él (‘div’, {
Classname: propos.classname,
Estilo: {Textalign: Attributes.alignment}
},
él (‘div’, {
ClassName: “Mi bloque de imágenes”
},
Él (Mediaupload, {
Onselect: onselectimage,
Tipo: “Imagen”,
Valor: atributos.mediaid,
Rendering: function (obj) {
devolver él (componentes.button, {
ClassName: Attributes.mediaid? ‘Image-Button’: ‘botón botón-botton’,
OnClick: obj.open
},
! Atributos.mediaid? i18n .__ (‘Image Load’, ‘First-My-Gutenberg-Block’): El (‘img’, {src: attributes.mediaurl})
)
}
})
),
él (‘div’, {
ClassName: “El contenido bloqueado”
},
él (texto rico, {
Clave: “editar”,
TagName: “H3”,
ClassName: “title-meu-bloc”,
Sustituyente: i18n .__ (‘El texto del título’, ‘Primer bloc-gutenberg-meu’),
Keeppplarderonfocus: verdadero,
Valor: atributos.itle,
Onchange: function (newtitle) {
propos.sattributes ({Título: Newtitle})
}
}),
él (texto rico, {
Clave: “editar”,
TagName: “P”,
Classname: “text-me-bloc”,
Sustituyente: i18n .__ (‘Texto’, ‘First-Me-Bloc-Gutenberg’),
Keeppplarderonfocus: verdadero,
Valor: Attributes.text,
Onchange: function (newText) {
propos.sattributes ({text: newText})
}
}),
él (‘botón’, {
ClassName: “Botón de bloque”,
Href: attributes.buttonurl}, attributes.buttontext)
)
)
];
},
Guardar: function (props) {
Var atributos = propos.attributes;
devolver (
él (‘div’, {
Classname: propos.classname,
Estilo: {Textalign: Attributes.alignment}
},
él (‘div’, {
ClassName: “Mi bloque de imágenes”
},
él (‘img’, {
SRC: atributos.mediaurl
})
),
él (‘div’, {
ClassName: “El contenido bloqueado”
},
él (richtext.content, {
TagName: “H3”,
ClassName: “title-meu-bloc”,
Valor: atributos.titlu
}),
él (richtext.content, {
TagName: “P”,
Classname: “text-me-bloc”,
Valor: atributos.text
}),
él (‘botón’, {
ClassName: “Botón de bloque”,
Href: atributos.buttonurl
}, Atributos.buttontext)
)
)
)
}
})
}) (
Window.wp.blocks,
Window.wp.editor,
Window.wp.components,
Window.wp.i18n,
Window.wp.Element
);
Como puede ver en el código anterior, primero importamos bloques, elementos, componentes, editores y componentes de internacionalización. Podemos hacer esto porque WordPress extiende el objeto de la ventana JavaScript predeterminada con el objeto WP y ese objeto tiene objetos adicionales que son útiles para nuestros bloques (Windows.wp.blocks, window.wp.edor, window.wp.c.c.c.ponents, Window. Wp. I18n, Window.wp.Element). Lo usaremos para crear nuestra estructura de bloques y componentes.
Los componentes MediaUppload y The Ensinting de texto sirven para cargar la imagen del autor y asumir las diferentes entradas de texto para guardarlas en la base de datos. Utilizaremos los componentes de InspectORControls y TextControl para crear secciones personalizadas con las opciones de bloque apropiadas. La función principal de JavaScript en este archivo es RegistroBlockType. Esta función registra el bloque y acepta dos parámetros. El primero es un nombre de bloque. Debe prefijo ese nombre con un espacio de nombre específico para su complemento. Esto es para evitar cualquier conflicto con otro bloque del mismo nombre. El segundo es una matriz con las siguientes propiedades y funciones: Título: el nombre del bloque que aparecerá al agregar un nuevo bloque al editor de Gutenberg.
Ícono: el icono del bloque que se tomará de los dashicones. También puede especificar sus propios iconos SVG si lo desea.
Categoría: aparecerá el bloque de Bloque Slug. Algunas de las categorías son: widgets comunes, de formato, apariencia e incorporación.
Palabras clave: una serie de filas que describen el bloque, similar a las etiquetas.
Atributos-un objeto JavaScript que contiene una descripción de los datos que ha guardado.
Editar: la función que ofrece una interfaz de bloque en el editor de Gutenberg.
Guardar: la función que describe cómo se reproducirá el bloque en la interfaz.
Gutenberg está construido con React, y los bloques que construimos para Gutenberg usan una sintaxis similar. Las siguientes cosas son útiles para saber antes de comenzar el desarrollo del bloque:
La clase HTML se reemplaza con ClassName como en React.
Los métodos de edición y rescate devuelven JSX, lo que significa JavaScript XML. Si se pregunta, JSX es sintaxis al igual que HTML, excepto que puede usar etiquetas HTML y otros componentes, como texto sin formato y richtext. Lo que hace es que cuando llamas a SetTributes, los datos de bloque se actualizan y el bloque en el editor se actualiza.
El bloque utiliza elementos de accesorios en las funciones de edición y rescate, así como reaccionar. El objeto Props contiene el objeto de atributo, la función SetTributes y muchos otros datos.
Ahora que entendemos diferentes partes de Gutenberg, podemos continuar creando nuestras opciones de bloque, el parámetro para el que se trata de atributos. En nuestro caso, hemos creado algunas opciones (MediaID, MediaURL, Título, texto, botón de texto, botón y alineación), porque puede ver que cada opción ha aceptado parámetros adicionales.
MediaURL: {
Tipo: “cadena”,
Fuente: “Atributo”,
Selector: ‘img’,
Atributo: ‘SRC’
},

Este código le dice que el editor extraerá el atributo SRC de una imagen que se encuentra en el marcado de bloque. En otro sentido, la etiqueta HTML será IMG donde el atributo SRC se complementará con el valor de la cadena. Hay muchas combinaciones y opciones que puede usar aquí. También puede consultar la documentación principal en cualquier momento. Ahora que hemos definido todos los atributos, continuaremos creando la lógica de la función de edición. La función de edición describe la estructura de su bloque en el contexto del editor. Esto representa lo que jugará el editor cuando se use el bloque. La función recibe las siguientes propiedades a través de un argumento de objeto. Primero almacenaremos todos los atributos en los atributos variables locales. Usaremos esa variable para cambiar el valor de las opciones. Luego crearemos una variable ONSelectimage adicional y esa variable será una función que establecerá la URL y la ID de medios para la imagen cuando el usuario cargue la imagen a través del editor de Gutenberg. En la parte de retorno definiremos toda la estructura HTML (marcado), como puede ver aquí: él (‘div’, {
Classname: propos.classname,
Estilo: {Textalign: Attributes.alignment}
},
él (‘div’, {
ClassName: “Mi bloque de imágenes”
},
Él (Mediaupload, {
Onselect: onselectimage,
Tipo: “Imagen”,
Valor: atributos.mediaid,
Rendering: function (obj) {
devolver él (componentes.button, {
ClassName: Attributes.mediaid? ‘Image-Button’: ‘botón botón-botton’,
OnClick: obj.open
},
! Atributos.mediaid? i18n .__ (‘Image Load’, ‘First-My-Gutenberg-Block’): El (‘img’, {src: attributes.mediaurl})
)
}
})
),
él (‘div’, {
ClassName: “El contenido bloqueado”
},
él (texto rico, {
Clave: “Editable”, TagName: “H3”,
ClassName: “title-meu-bloc”,
Sustituyente: i18n .__ (‘El texto del título’, ‘Primer bloc-gutenberg-meu’),
Keeppplarderonfocus: verdadero,
Valor: atributos.itle,
Onchange: function (newtitle) {
propos.sattributes ({Título: Newtitle})
}
}),
él (texto rico, {
Clave: “editar”,
TagName: “P”,
Classname: “text-me-bloc”,
Sustituyente: i18n .__ (‘Texto’, ‘First-Me-Bloc-Gutenberg’),
Keeppplarderonfocus: verdadero,
Valor: Attributes.text,
Onchange: function (newText) {
propos.sattributes ({text: newText})
}
}),
él (‘botón’, {
ClassName: “Botón de bloque”,
Href: atributos.buttonurl
}, Atributos.buttontext)
)
)
Creamos el elemento DIO con ClassName, que en este caso es WP-Block-Image-with-Text-Block. De lo contrario, es WP-Block, más el nombre de su bloque. Aquí también establecí el estilo en línea CSS para la alineación. Luego agregaremos dos elementos adicionales cuando un niño. Aquí, el primer elemento tiene classname my-block-image. Dentro de ese elemento, imprimiremos la imagen que el usuario ha cargado a través del editor.
Aquí establecemos ese elemento para que sea Mediaupload. Este artículo tiene varios atributos (ONSECT, Tipo, Valy y Render). El primero significa que redirigiremos un objeto de medios a la función variable ONSelect y esa función devolverá un nuevo objeto con ID y URL de medios. El segundo define que el elemento es una imagen, y el tercero recopila la ID de medios del objeto de medios que cargamos, y la función de representación imprimirá una etiqueta HTML adicional donde esa etiqueta será el botón de carga. El segundo elemento secundario es para la información de contenido, donde puede establecer el texto del título, el texto del contenido y el botón. El primer elemento y el segundo elemento se establecen como RichText y con la tecla Atributo se pueden editar. Esto significa que puede cambiar el texto en vivo, la función responsable es OnChange. Esta función se hace cargo del nuevo valor del texto para escribirlo y lo cambia dentro del elemento de bloque. Otros atributos que pueden ser útiles son el marcador de posición y Kepplarderonfocus. Estos atributos son similares a un sustituyente en los campos de entrada y se utilizan para establecer una etiqueta para que el usuario sepa dónde editar. El tercer elemento es la etiqueta HTML para el botón, donde establecemos los atributos del botón (URL y texto) a través de opciones de bloqueo personalizadas. La sección que se ocupa de ella es:
Él (InspectORControls, {Key: ‘Inspector’},
él (componentes.panelbody, {
Título: i18n .__ (“Bloquear contenido”, “Primer block-gutenberg”),
ClassName: “Block-Contentent”,
Initialopen: verdadero
},
El (‘P
Él (TextControl, {
Teclee el texto”,
Etiqueta: i18n .__ (‘Texto de botón’, ‘my-forst-gutenberg-block’), valor: atributes.buttontext,
Onchange: function (newButTontext) {
propos.sattributes ({buttontext: newButTontext})
}
}),
Él (TextControl, {
Tipo: “URL”,
Etiqueta: i18n .__ (“URL de botón”, “my-forst-gutenberg-block”)
Valor: atributos.buttonurl,
Onchange: function (newButtonurl) {
propos.sattributes ({Buttonurl: NewButtonUrl})
}
})
)
)
Hemos creado el elemento InspectorControls, que puede considerar como una sección de meta casilla, pero solo para el editor de Gutenberg. Dentro de él, definimos el título de la sección, la descripción y las opciones. Si desea crear más secciones de InspectorControls, entonces este atributo será útil para usted: Initialopen. Con esto, puede definir qué sección será la apertura inicial predeterminada. Para crear opciones dentro de la sección, debe crear el elemento que es TextControl, por ejemplo (puede encontrar todos los tipos de campos disponibles aquí). En nuestro caso, creamos dos opciones: texto de texto y URL del botón. Utilizaremos estas opciones para reproducir contenido adicional, en este caso el elemento bajo el contenido del contenido. El resultado del editor de Gutenberg se verá así:
La función de rescate define la forma en que se deben combinar los diferentes atributos en la marca final, que luego es serializada por Gutenberg en el post_content. Para la mayoría de los bloques, el valor devuelto de guardar debería ser una instancia de elemento WordPress que represente cómo aparecerá el bloque en el sitio. Para los bloques dinámicos, el valor devuelto del rescate podría ser una copia del contenido del bloque que se mostrará solo si el complemento que implementa el bloque alguna vez está deshabilitado. Alternativamente, devuelva un valor nulo (vide) para evitar guardar cualquier marcado en el contenido del bloque dinámico, en lugar de posponerlo siempre cuando el bloque se muestra en la parte delantera del sitio. El front-end
Dentro de este archivo estableceremos el estilo CSS para este elemento de bloque y ese estilo se aplicará para el front-end y para la página del editor de Gutenberg.
/* ============================================ == == =========================
Estilo de bloque – Comienza
============================================= == ==== ===================== */
.wp-block-image-with-text-block {
Posición: relativo;
Pantalla: bloque en línea;
Align vertical: arriba;
Ancho: 100%;

}
.wp-block-image-with-text-block .my-block-image {
Posición: relativo;
Pantalla: bloque en línea;
Align vertical: arriba;
}
.wp-block-image-with-text-block .my-block-image img {
Bloqueo de pantalla;
}
.wp-block-image-with-text-block .my-block-cocount {
Posición: relativo;
Pantalla: bloque en línea;
Align vertical: arriba;
Ancho: 100%;
Ony-Icy: 20px;
}
.wp-block-image-with-text-block .my-block-title {
Marja: 0;
}
.wp-block-image-with-text-block .my-block-text {
Marja: 0;}
Estilo de editor de CSS
Dentro de este archivo, puede establecer un estilo CSS adicional para su bloque para remediar los posibles problemas dentro del editor de Gutenberg o agregar un estilo adicional para él. Además, su bloque en el editor de Gutenberg tendrá el mismo estilo que en el frente, porque el estilo frontal se carga aquí.
/* ============================================ == == =========================
Estilo del editor de bloques: comienza
============================================= == ==== ===================== */
.wp-block-image-with-text-block {
Ony-Icy: 28px;
}
.wp-block-image-with-text-bloque.
Bloqueo de pantalla;
llenado: 0;
}
Ahora hemos creado la nueva imagen con bloque de texto para el editor de Gutenberg y puede verla en vivo. El resultado se verá así:
Esperamos que hayas encontrado este elemento útil. Si le gustó, ¡vea algunos de estos artículos también!
Las características del bloque de la Galería Gutenberg
Cambie el autor de una publicación en el clásico editor de WordPress y Gutenberg
Una guía para el bloque de imágenes de Gutenberg
Todo sobre Gutenberg WordPress Blocks
Una breve introducción a WordPress Gutenberg

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 *