Für den Gutenberg-Editor gibt es die Möglichkeit, alternative Block-Stile zu erstellen. Bei der Auswahl eines Stils wird dann eine CSS-Klasse eingefügt und der Block kann ein angepasstes vordefiniertes Design erhalten. Von Haus aus hat beispielsweise der Zitat-Block einen Stil »Groß«. Hier zeige ich anhand eines kleinen Beispiel-Plugins, wie sich so ein Stil erstellen lässt.
Update vom 1. Juni 2019: In der ersten Version des Artikels wurde noch ein Standard-Stil definiert, damit der alternative Stil wieder entfernt werden kann. Das scheint inzwischen nicht mehr notwendig zu sein – in einem Test hat WordPress den Standard-Stil automatisch eingefügt.
Voraussetzung
In meinem vorherigen Beitrag habe ich beschrieben, wie sich Webpack einrichten lässt. Diese Einrichtung brauchen wir für das Plugin – den fertigen Code des Plugins gibt es auf GitHub.
Aus dem vorangegangen Beitrag haben wir dann jetzt:
- Die Webpack-Konfiguration, package.jsonundpostcss.config.json.
- Die blocks/index.js,blocks/editor.scssundblocks/frontend.scss.
Umsetzung
Beginnen wir mit der Erstellung der Haupt-Plugin-Datei und anschließend dem JavaScript.
Main-File des Plugins erstellen
In der obersten Ebene unseres Plugins legen wir die Datei krautpress-gutenberg-block-style.php an und füllen sie mit folgenden Inhalt:
<?php
/**
 * Plugin for custom list block style as example for KrautPress article.
 *
 * @license GPL-2.0+
 * @package krautpress/block-style
 *
 * @wordpress-plugin
 * Plugin Name: KrautPress block style
 * Description: A plugin that adds a block style to the list block.
 * Version:     0.1.0
 * Author:      Florian Brinkmann
 * Author URI:  https://florianbrinkmann.com/en/
 * License:     GPL v2 http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 */
if ( ! defined( 'WPINC' ) ) {
	die;
}
/**
 * Enqueue block script and backend stylesheet.
 */
add_action( 'enqueue_block_editor_assets', function() {
    wp_enqueue_script(
        'krautpress-gutenberg-block-style-editor-script',
        plugins_url( 'assets/js/editor.blocks.js', __FILE__ ),
        [ 'wp-blocks', 'wp-element', 'wp-edit-post', 'lodash' ]
    );
    wp_enqueue_style(
        'krautpress-gutenberg-block-style-editor-style',
        plugins_url( 'assets/css/editor.blocks.css', __FILE__ )
    );
} );
/**
 * Enqueue styles for backend and frontend.
 */
add_action( 'enqueue_block_assets', function() {
    wp_enqueue_style(
        'krautpress-gutenberg-block-style-frontend-style',
        plugins_url( 'assets/css/frontend.blocks.css', __FILE__ )
    );
} );
Code-Sprache: PHP (php)Zunächst kommt der obligatorische Plugin-Header, damit WordPress den Code überhaupt als Plugin erkennt. Anschließend prüfen wir, ob der Code innerhalb einer WordPress-Installation abläuft und binden ab Zeile 24 über die enqueue_block_editor_assets-Action ein Skript und ein Stylesheet auf den Gutenberg-Seiten im Backend ein.
Dabei handelt es sich um Kompilierungsergebnisse der Source-Dateien, die wir im ersten Schritt bereits angelegt haben. Als Abhängigkeiten geben wir für das Skript
- wp-blocksmit Funktionen zur Erstellung von Blocks,
- wp-element, ein Abstaktions-Layer auf React (heißt, im Hintergrund läuft React, zugegriffen wird darauf aber über Gutenberg-eigene Funktionen. So könnte später das Framework im Hintergrund auch ausgetauscht werden, ohne dass Code von Plugins oder Themes angepasst werden müsste),
- wp-edit-postund
- lodash
an. Für unser einfaches Beispiel brauchen wir vermutlich nicht alle, zum Beispiel lodash und wp-element, aber bei meinen bisherigen Erfahrungen mit Gutenberg hat mit diesen Abhängigkeiten immer alles funktioniert. 🙂
Ab Zeile 39 wird dann innerhalb einer Funktion, die an enqueue_block_assets gehängt wird, noch ein Stylesheet nur für das Frontend eingebunden.
Das JavaScript für den Block-Stil erstellen
Ein Block-Stil ist recht schnell angelegt. Die folgenden Zeilen sind das ganze JavaScript, um einen Stil für den Listen-Block zu erstellen:
// Add a block style.
wp.domReady( () => {
	const { registerBlockStyle } = wp.blocks;
	registerBlockStyle( 'core/list', { name: 'large', label: 'Groß' } );
} );
Code-Sprache: JavaScript (javascript)Zunächst warten wir, bis das DOM fertig geladen ist. Dann erstellen wir mit wp.blocks.registerBlockStyle den Stil, indem wir als ersten Parameter den Bezeichner des gewünschten Blocks angeben – in unserem Fall core/list – gefolgt von einem Optionen-Objekt mit Namen und Beschriftung. Der Name wird für die CSS-Klasse verwendet, die Beschriftung wird dem Nutzer angezeigt.
Wenn wir das jetzt über npm run build mit Babel kompilieren, das Plugin aktivieren und einen Listen-Block einfügen, sollten wir über den Button ganz links in der Block-Toolbar neben dem Standard-Stil den neuen »Groß«-Stil auswählen können.
Fügen wir jetzt noch ein wenig CSS in die blocks/frontend.scss ein:
.is-style-large {
	font-size: 1.5em;
}
Code-Sprache: CSS (css)und importieren das in die editor.scss:
@import './frontend';
Code-Sprache: JavaScript (javascript)Somit sollten wir auch visuell einen Unterschied feststellen, wenn der große Stil ausgewählt ist 🎉 Wer das Plugin ohne große Einrichtung von Webpack und Co. testen möchte, kann es mit der krautpress-gutenberg-block-style.zip von der Release-Seite auf GitHub installieren.
 
					
Oder man wartet einfach auf den offizielle Stable Release von ACF Pro 5.8. 🙂
Womit man automatisch eine gescheite, einfache API für den Käse hat, und sich nicht mit dem Wahnsinn der WordPress-Entwickler herumschlagen muss – zumindest nicht mehr so viel …
cu, w0lf.
Hi Wolf,
jo, auch eine Möglichkeit. Ich mache mich aber nicht gerne abhängig von solchen Lösungen 🙂
Viele Grüße
Florian
Wenn man die Strings noch übersetzen möchte, ist übrigens der Hook enqueue_block_editor_assets zu spät. Stattdessen müsste man hier auch mindestens den Hook init verwenden.
Hey Matze,
danke für den Hinweis 🙂 Meinst du Übersetzen mit den PHP-Funktionen (und
wp_localize_script()) oder über die JS-Übersetzungs-Funktionen?LG
[…] habt, könnten meine Beiträge »Einrichtung von Webpack für die Gutenberg-Entwicklung« und »Alternativen Stil für Gutenberg-Block erstellen« bei KrautPress hilfreich […]
Dieser Article wurde erwähnt auf wpletter.de