Bearbeitung von MySql-Datenbanken
Entwickler, die täglich mit Datenbanken arbeiten, werden diesem Artikel nur ein müdes Lächeln abgewinnen, doch mich kostete es einige Zeit, bis ich die Hürden der verschiedenen SQL-Version überwunden hatte.
Titel und Überschrift sind etwas anderes
WordPress unterscheidet zwischen dem Titel und dem Inhalt eines Beitrags. Die Themen nehmen stillschweigend an, dass ein Beitrag automatisch den Titel als Überschrift verwendet. Das hat aber organisatorische Nachteile.
Der Titel ist jener Text, unter dem man einen Beitrag im Beitragsverzeichnis findet. Es ist auch jener Text, mit dem der Permalink gebildet wird, also jener Text, der beim Aufruf eines Artikels in der Adresszeile steht und der von Suchmaschinen indiziert wird. Und wenn einmal ein Artikel publiziert wurde, sollte der Titel nicht mehr verändert werden.
Der Inhalt eines Artikels ist wie eine Art Word-Datei mit einer bis zu sehr aufwändigen Struktur und logischerweise auch mit einer Überschrift als erste Zeile.
Mit der WordPress-Version 5.9 kann der Anwender über den neuen Website-Editor selbst entscheiden, ob der Titel vor dem Artikel angezeigt werden soll oder nicht.
Die meisten klassischen Themen erlauben es aber nicht, den Titel als eine Art „automatischer“ Überschrift zu unterdrücken. Die Folge ist, dass das Thema den Titel anzeigt und danach der Artikel die Überschrift, meist denselben Text wiederholt. Daher beginnen die meisten Autoren ihren Artikel nicht mit einer Überschrift, sondern mit der Einleitung. Damit schaut zwar die Seite in der Webansicht zufriedenstellend aus, doch die mangelhafte Systematik ärgert den Anwender.
Es gibt Plugins, die es erlauben, den Titel in der Ausgabe zu unterdrücken. Mit WordPress 5.9 kann der Anwender selbst bestimmen, ob er den Titel der Seite in der ersten Zeile platziert oder nicht, und er kann auch den Titel beliebig formatieren. Meine Lösung ist, diesen Titel zu entfernen und es dem Artikel zu überlassen welcher Text als Überschrift verwendet wird.
Als Beispiel wird der vorliegende Artikel verwendet. Der Titel ist „MS SQL <> MySQL“, was den Permalink ms-sql–mysql ergibt. Die Überschrift lautet aber „Bearbeitung von MySql-Datenbanken“.
Titel programmatisch hinzufügen
Ein großes Web mit mehr als 1.500 Beiträgen wurde ein Thema verwendet, das den Titel automatisch eingefügt hat, daher begannen alle Artikel mit der Einleitung. Bei, Umstieg auf das neue Themenkonzept der WordPress-Version 5.9 wurde die Automatik entfernt. Alle neuen Artikel werden immer mit einer Überschrift eingeleitet, doch die älteren Artikel haben nach der Themenumstellung keine Überschrift.
Eine Lösung wäre, jeden Artikel aufzurufen und den Titel einzufügen und als Überschrift H1
zu formatieren. Aber wegen der großen Zahl macht man das am besten nicht händisch, sondern in der Datenbank.
Alle unsere WordPress-Datenbanken können interaktiv mit PhpMyAdmin bearbeitet werden und bieten vielfältige Möglichkeiten, solche Manipulation vorzunehmen.
Tabelle: wp_posts
Spalte: post_content
Spalte: post_title
Die Spalte post_content
soll also um die Zeile post_title
erweitert werden, was syntaktisch so ausschaut:
post_content = post_title + post_content
und weil noch Formatierung dazukommen soll:
post_content = "<h1>" + post_title + "</h1>" + post_content
Vor der Anwendung in MySQL testete ich dieses Update in Access, das für Gelegenheitsprogrammierer einen Entwurfsmodus hat und das ergab folgende Syntax:
UPDATE wp_posts SET post_content=post_title+post_content WHERE ID=23862
In Access funktioniert dieses UPDATE
-Statement einwandfrei, wendet man es allerdings in MySQL an setzt der Befehl den Inhalt des Feldes post_content
auf 0
. Einige Recherchen später stellte sich heraus, dass man zur Verkettung von Strings die Funktion CONCAT_WS
verwenden muss, in der Form:
CONCAT_WS(CHAR('-', text1, text2, ...)
'-'
ist ein Zeichen, das die Texte voneinander trennt,- mit
''
gibt es kein Zeichen dazwischen, - mit
CHAR(10 USING UTF8)
erhält man einen Zeilenumbruch als Trennzeichen.
Mit dem neuen Blockeditor genügt es nicht, <h1>Titel</h1>
zu schreiben, man muss darüber hinaus "<!-- wp:heading -->"
voranstellen und "<!-- /wp:heading -->"
nachstellen.
Nach einigen Versuchen ergab sich folgender Befehl, der jedem Artikel den Titel korrekt formatiert voranstellt.
UPDATE wp_posts
SET post_content=CONCAT_WS(CHAR(10 USING UTF8), "<!-- wp:heading -->",CONCAT_WS('',"<h1>", post_title,"</h1>"),"<!-- /wp:heading -->", CHAR(10 USING UTF8), post_content)
WHERE ID<23862 AND post_type="post" AND post_status="publish"
Da nicht nur der Artikel mit der ID 23862
zu modifizieren ist, sondern dieser und alle älteren, steht im WHERE
-Teil ID<23862
. Die Einschränkung post_type="post"
beschränkt die Manipulation auf Beiträge und schließt Seiten und andere Postings aus. Die Einschränkung post_status="publish"
beschränkt die Manipulation auf veröffentlichte Artikel.
Ergebnis
Das Ergebnis kann sich sehen lassen, Meine Rapid-Seite www.ewkil.at benutzt einerseits das neue Thema Twenty Twentytwo und zeigt den Titel nicht an und überlässt das Beitragsfeld vollständig dem Feld wp_content
.
Franz war pensionierter HTL Lehrer (TGM), Präsident von ClubComputer, Herausgeber der Clubzeitung PCNEWS und betreute unser Clubtelefon und Internet Support. Er war leidenschaftlicher Rapid Wien Fan. Er ist leider Anfang Jänner 2024 nach langer schwerer Krankheit verstorben.
Neueste Kommentare