Gutenberg Linktipps #4

Voraussetzungen für den Erfolg

Morten Rand-Hendriksen hat den zweiten Artikel in seiner "Gutenberg and the Future of WordPress"-Reihe veröffentlicht. In Conditions for Success beschreibt Morten, ähnlich wie schon Daniel Bachhuber, was für eine erfolgreiche Einführung von Gutenberg notwendig ist. Er geht dabei auf die Punkte Accessibility, eine lange Test- und Übergangsphase, sowie einen möglichen Fork und was dieser als Konsequenzen hätte, ein.

WYSIWYG und Accessibility

Amanda Rush hat sich einige Gedanken zu WYSIWYG-Editoren und Gutenberg im Bezug zu Accessibility gemacht. Sie sieht Gutenberg mittlerweile auf einen guten Weg, bemängelt aber, dass es zu wenig Dokumentation gibt um das Konzept des neuen Editors zu erklären.

Page Builders in einer Gutenberg Welt

Robby McCullough von Beaver Builder beschreibt in seinem Artikel Page Builders in a Gutenberg World warum Page Builder auch mit Gutenberg noch gebraucht werden und wie sie Kompatibilität zwischen den Editoren umgehen wollen.

Gutenberg 1.9

Am 11. Dezember wurde die mit Gutenberg 1.9 die 19. Betaversion veröffentlicht. Eine ausführliche Zusammenfassung mit allen Änderungen ist im Core Make-Blog zu finden,

Die größte Neuerung des Release sind die globalen wiederverwendbaren Blöcke, aber es gibt auch Verbesserungen bei den Templates (diese können nun gesperrt werden), Versionierung von Blockattributen, so dass Markup migriert werden kann, und viele Erweiterungen und Bugfixes.

Gutenberg Linktipps #3

3 Dinge die man über Gutenberg wissen sollte

Im Artikel WordPress is Changing. Here are 3 Things You Need to Know About Gutenberg beschreibt Morten Rand-Hendriksen wie man sich auf Gutenberg vorbereitet, warum Gutenberg mehr als ein Editor ist und wie man dabei mithelfen kann.

State of the Word Transcript

Im TinyMCE Block gibt es das vollständige Transcript der State of the Word Session vom WordCamp US 2017 zum Nachlesen.

Warum sich Josh Pollock nun auf Gutenberg freut

Josh Pollock ist Core Contributor und Entwickler des Caldera Forms Plugins. In seinem Artikel Why I Came Back From Nashville All Excited About Gutenberg erklärt warum er vor dem WordCamp US das Gutenberg Projekt sehr skeptisch gesehen hat und was sich daran nun geändert hat. Viele Kritikpunkte wurden behoben, einige neue interessante Funktionen sind hinzugekommen und das Ziel von Gutenberg ist nun besser erkennbar.

Gutenberg Linktipps #2

Wie Gutenberg ein Erfolg werden kann

Daniel Bachhuber hat sich einige Gedanken gemacht, wie wir es schafften, dass die überwiegende Mehrheit der WordPress Benutzer ab dem ersten Tag von Gutenberg begeistert ist und ihn ohne Probleme nutzen kann. Hierfür sieht er 2 Vorraussetzungen: Gute UX und Kompatibilität. Seine Idee, wie dies erreicht werden könnte, ist im Artikel Landing Gutenberg in WordPress 5.0 nachzulesen.

Gutenberg und Publishers

Im August auf dem WordCamp for Publishers hat Aaron Jorbin eine Session zu Gutenberg gehalten. nach einer kurzen Präsentation und Demo gab es eine Diskussion in der die Anforderungen für Publisher an Gutenberg diskutiert wurden. In seinem Blogbeitrag Gutenberg and Publishers fasst Aaron die ausführliche Diskussion zusammen.

Was WordPress VIPs über Gutenberg wissen müssen

Das WordPress VIP Programm von Automattic richtet sich an Enterprise Kunden und Agenturen für die Entwicklung, Hosting und Support großer Seiten. Im Artikel The New WordPress Editor: What You Need to Know about Gutenberg fasst Steph Yiu die Konzepte des Editors und den aktuellen Stand zusammen und beschreibt, wie sich die Kunden mit ihren Teams darauf vorbereiten können.

Gutenberg Linktipps #1

Werbung in der Gutenberg Welt

Im Artikel Ads in a Gutenberg World macht sich Helen Hou-Sandi darüber Gedanken, wie Werbung in Blocks aussehen könnte. Es wäre möglich Werbung automatische in jedem 5. Block auszuspielen oder bereits bei Beginn Werbeanzeigen darzustellen, um die der Inhalt geschrieben wird. Dies ist allerdings nur eine Überlegung was möglich wäre. Ebenfalls nennt sie noch ein paar Schnittstellen, die dafür nötig wären diese Funktionalität in Gutenberg zu integrieren.

Werbeblöcke in Gutenberg

Die Strategie hinter Gutenberg

Der Webworker Torsten Landsiedel hat einige Bedenken zur Einführung von Gutenberg in seinem Artikel State of the word – oder auch Tomorrowland zusammengefasst. Er nennt zum einen den frühzeitigen Merge in den Core, als auch die Kommunikationsstrategie als Probleme. Torsten selbst ist im Supportbereich aktiv und hat hier aus Erfahrungen kein Gutes Gefühl, wenn ein unfertiges Produkt auf den Kunden losgelassen wird. Lesenswert ist auch die Diskussion in den Kommentaren unter dem Beitrag.

State of the Word

In seiner jährlichen Keynote "State of the Word" sprach Matt Mullenweg am 2. Dezember beim WordCamp US in Nashville über das vergangene Jahr in der "WordPress-Welt". Dabei gab es neben einer Gutenberg Präsentation von Matias Ventura auch einige Ausblicke auf die Pläne des kommenden Jahres. Matt glaubt, dass es noch ungefähr 12 Iterationen, also rund 4 Monate (April 2018) dauern wird, bis Gutenberg für den Massenmarkt bereit ist. Neben dem Editor sind der Customizer und Themes Gutenberg Entwicklungs-Schwerpunkte, die im nächsten Jahr angegangen werden. In einer Q&A nach dem Talk wurden noch einige Fragen rund um Gutenberg beantwortet.

Das Video gibt es jetzt online auf WordPress.tv zu sehen. Gute Zusammenfassungen des Talks sind auf Krautpress.de (Deutsch) und Poststatus.com (Englisch) zu finden.

Gutenberg 1.8

Am 28.11.2017 wurde mit Gutenberg die 18. Beta Version des Plugins veröffentlicht. Diese kann zu Testzwecken über das offizielle Plugin Verzeichnis heruntergeladen werden.

Die neue Version 1.8 bring einige Verbesserungen unter der Haube mit sich, um Plugins mehr Möglichkeiten zu bieten Gutenberg anzupassen. Dies betrifft zum einen die Erweiterung bestehender Blöcke, die Eingrenzung verfügbarer Blöcke oder die Einstellungsmöglichkeit von Meta-Boxen, ob sie unter Gutenberg erscheinen sollen. Eine weitere Interessante Funktion sind die Block Templates, die ich bereits in einem eigenen Artikel vorgestellt habe.

Meta Box Kompatibilität

Wenn eine Meta Box nicht mit Gutenberg funktioniert und der Entwickler kein Update liefern möchte oder kann, so kann er beim Initialisieren das __block_editor_compatible_meta_box Argument mit angeben.

add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback',
    null, 'normal', 'high',
    array(
        '__block_editor_compatible_meta_box' => false,
    )
);

Ist der Wert auf false gesetzt, so wird nicht der Gutenberg Editor geladen, sondern WordPress fällt auf den Classic Editor zurück und die Box funktioniert weiterhin.

Wenn eine Meta Box in eine Blockfunktion umgewandelt wurde, so kann der Entwickler mit __back_compat_meta_box angeben, dass die Box nur im Classic Editor aber nicht unter Gutenberg angezeigt wird.

add_meta_box( 'my-meta-box', 'My Meta Box', 'my_meta_box_callback',
    null, 'normal', 'high',
    array(
        '__back_compat_meta_box' => false,
    )
);

Weitere Infos zu den Meta Boxen findet ihr im Gutenberg Handbuch.

Weitere Neuerungen

Aber auch an der Benutzeroberfläche hat sich einiges getan. So worden einige Elemente nach User-Feedback verbessert und die Unterstützung auf mobilen Geräten verbessert. Beim Veröffentlichungs-Ablauf wurden die ersten Verbesserungen umgesetzt, weitere werde in den nächsten Versionen folgen.

Ein heiß diskutiertes Thema sind die Textfarben und Hintergründe, die man selbst definieren kann. In dieser Version ist ein Kontrast-Checker hinzugekommen, der prüft ob die Texte mit den Farben gut lesbar sind und somit barrierefrei bleiben.

Eine vollständige Übersicht der Änderungen gibt es im Make-Blog auf WordPress.org.

Block Templates

Noch ist das Feature nicht in Gutenberg integriert, seit heute gibt es aber ein Proposal Ticket auf GitHub, das die Funktionen von Block Templates beschreibt und einige Beispiele aufzeigt.

Definition

Ein Block Template ist einfach gesagt eine Liste von Blöcken. Die Blöcke können vordefinierte Attribute und Platzhalter enthalten, sie können statisch oder dynamisch sein.

Nutzung

Block Templates sollten nicht mit globalen oder verschachtelten Blöcken verwechselt werden. Die Liste der Blöcke können aber globale Blöcke und auch verschachtelte Blöcke beinhalten. Hierbei geht es nicht darum ein Konfigurierte Gruppe von Blöcken auf verschiedenen Seiten wiederzuverwenden, dafür sind globale Blöcke, mit ineinander geschachtelten Blöcken die bessere Lösung.

Bei Block Template  geht es darum eine Vorlage zu liefern, die vom Nutzer an verschiedenen Stellen ausgefüllt werden kann.

Hier ein Beispiel wie Templates in Custom Post Types bereitgestellt werden können:

function register_book_type() {
	$args = array(
		'public' => true,
		'label'  => 'Books',
		'show_in_rest' => true,
		'template' => array(
			array( 'core/image' ),
			array( 'core/heading', array(
				'placeholder' => 'Author...',
			) ),
			array( 'core/paragraph', array(
				'placeholder' => 'Add book description...',
			) ),
		),
	);
	register_post_type( 'book', $args );
}
add_action( 'init', 'register_book_type' );

Details

Template können:

  • In JS (state tree) und PHP definiert werden
  • Blöcke mit Unterblöcken enthalten
  • Gesperrt sein (Es ist nicht möglich die Blöcke zu bewegen oder zu löschen)
  • Als Standard für einen Post Type gesetzt werden
  • Vom Benutzer gespeichert und bearbeitet werden
  • Als Inhalt eines page-template.php genutzt werden um den Editor von einem Theme aus zu initialisieren

Wie werden Blöcke gespeichert?

Bisher wurde der Inhalt eines Beitrags oder einer Seite in die Tabelle wp_posts in der Spalte post_content gespeichert. Doch wie wird das nun gelöst, ist jeder Block ein eigener Datenbank Eintrag?

Der Inhalt von Beiträgen und Seiten wird auch weiterhin komplett in der Spalte post_content in der wp_posts Tabelle abgespeichert. Dies verhindert zum einen das Zusätzliche Abfragen von Datenbankeinträgen, was Performance Einbusen bedeuten würde, zum anderen bietet diese Lösung die beste Abwärtskompatibilität mit den schon bestehenden Inhalten.

Gutenberg Block edit flow
Edit Flow

Laden

Wenn ein, aus mehreren Blöcken bestehender, Inhalt im Editor geladen wird, wird mit Hilfe eines Parsers der Text in die jeweiligen Blöcke aufgeteilt. In der Informatik nennt man diesen Schritt Serialisierung. Strukturierte Daten werden in eine Sequenzielle Darstellungsform abgebildet. Für die Strukturierung der Blöcke im Inhalt werden HTML Kommentare verwendet. Diese werden vom Parser interpretiert und und so eine geordnete Liste von Blöcken erstellt um den sogenannten Post State zu erzeugen.

<!– wp:heading –>
<h2>Eine Überschrift</h2>
<!– /wp:heading –>

<!– wp:paragraph –>
<p>Hier steht Text</p>
<!– /wp:paragraph –>

Block API und Rendern

Mit Hilfe der Block API werden die einzelnen Blöcke nun interpretiert und visuell dargestellt. Blöcke haben jeweils eine edit() Funktion, die beschreibt wie der Inhalt im Editor interpretiert werden soll. 

Wenn sich Block Attribute oder Inhalte ändern, wird die Darstellung neu gerendert und die rechte Schlaufe des Diagrams einmal durchlaufen. Dies geschieht auch, wenn ein neuer Block hinzugefügt oder entfernt wird.

Serialisieren und Speichern

Wenn der Inhalt nun gespeichert wird, wird jeweils die save() Funktion eines jeden Blocks ausgeführt und eine HTML Darstellung erzeugt. Zusätzlich wird der HTML Kommentar um den Block gesetzt, um ihn beim nächsten Laden wieder interpretieren zu können. Im nächsten Schritt werden die Blöcke der Seite oder des Beitrags zusammengesetzt und wieder in die Spalte abgespeichert.