Update Befehl in Wordpress DB mit Platzhalter

michaelxxx

Aktiver Benutzer
Beiträge
25
Hallo zusammen,

ich bräuchte mal Eure Hilfe.

Ich habe in Wordpress in meinen Beiträgen für meine Überschriften auf Grund des Themes bisher einen Shotcode genutzt:
[x_custom_headline type="left" level="h2" looks_like="h3"]Hier steht eine Überschrift[/x_custom_headline]

Das ist natlich völlig überflüssig und ich möchte es gerne durch ein simples h2 ersetzen:
<h2>Hier steht eine Überschrift</h2>

Jetzt habe ich über 1.000 Beiträge in meinem Blog und das alles händisch anzupassen dauert Wochen.

Kann ich das per MySQL in der Datenbank mit einem Update Befehl machen?
 
Werbung:
ginge, in anderen Datenbanken, prinzipiell mit regulären Ausdrücken, vielleicht hilft Dir das weiter. Ob aber MySQL das kann, ...
 
Also das geht auch ohne regex, einfach mit 2 Replace.

Zum prüfen obs klapp kannst du sowas nehmen:
Code:
SELECT myfield,REPLACE(
      REPLACE(myfield, '[x_custom_headline type="left" level="h2" looks_like="h3"]', '<h2>'),
      '[/x_custom_headline]','/<h2>') AS result
FROM mytable
WHERE myfield LIKE '%[/x_custom_headline]%';


Beispiel:
Code:
MariaDB [test]> SELECT myfield,REPLACE(
    ->   REPLACE(myfield, '[x_custom_headline type="left" level="h2" looks_like="h3"]', '<h2>'),
    ->   '[/x_custom_headline]','/<h2>') AS result
    -> FROM mytable
    -> WHERE myfield LIKE '%[/x_custom_headline]%';
+------------------------------------------------------------------------------------------------------------+---------------------------------------+
| myfield                                                                                                    | result                                |
+------------------------------------------------------------------------------------------------------------+---------------------------------------+
| [x_custom_headline type="left" level="h2" looks_like="h3"]Hier steht eine Überschrift[/x_custom_headline]  | <h2>Hier steht eine Überschrift/<h2>  |
+------------------------------------------------------------------------------------------------------------+---------------------------------------+
1 row in set (0.014 sec)

MariaDB [test]>

und für die Änderung:


Code:
UPDATE mytable
    SET myfield = REPLACE(
      REPLACE(myfield, '[x_custom_headline type="left" level="h2" looks_like="h3"]', '<h2>'),
      '[/x_custom_headline]','/<h2>')
WHERE myfield LIKE '%[/x_custom_headline]%';

Beispiel

Code:
MariaDB [test]> UPDATE mytable
    -> SET myfield = REPLACE(
    ->   REPLACE(myfield, '[x_custom_headline type="left" level="h2" looks_like="h3"]', '<h2>'),
    ->   '[/x_custom_headline]','/<h2>')
    -> WHERE myfield LIKE '%[/x_custom_headline]%';
Query OK, 1 row affected (0.008 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [test]> SELECT * from mytable;
+----+---------------------------------------+
| id | myfield                               |
+----+---------------------------------------+
|  1 | <h2>Hier steht eine Überschrift/<h2>  |
+----+---------------------------------------+
1 row in set (0.001 sec)

MariaDB [test]>


Gruß

Bernd
 
Na dann hoffen wir mal, dass x_custom_headline tatsächlich nur in der Kombination verwendet wird.
Und dass /<h2> vom TE korrigiert wurde.
Und dass es Backups vor dem Update gab.
tja, sonst kann man ja auch das : [x_custom_headline type="left" level="h2" looks_like="h3"] ind das WHERE LIKE setzen
 
Danke für Eure Tipps. Ich versuche das gerade mal auszuprobieren.

Frage: geht das nur mit MariaDB? Die hab ich glaub ich nicht.
 
Ein Replace geht mit so ziemlich jeder DB. Das ist weniger das Problem.
Die Frage ist m.E. eher, ob die Aufgabenstellung und die Randbedingungen in der WP DB vollständig beschrieben sind.
 
Da ich mich in MySQl wirklich nur am Rand auskenne, wäre es wirklich klasse, wenn Du mir hier noch einmal mit der richtigen Syntax für SQL helfen könntest.
 
Die Syntax ist soweit richtig. Du solltest nur wissen in welcher Tabelle du welches Feld ändern möchtest. Das musst du natürlich noch anpassen und das /<h2> zu </h2> tauschen
 
Also, ich habe es in meiner Staging Datenbank mal ausprobiert, und generell funktioniert das. Also schonmal vielen Dank für Eure Hilfe.

Aber, und jetzt wird vielleicht etwas tricky (oder unmöglich?):

Ich habe 2 verschiedene Headlines:

[x_custom_headline type="left" level="h2" looks_like="h3"]Hier steht eine Überschrift[/x_custom_headline]
[x_custom_headline type="left" level="h3" looks_like="h7"]Hier steht eine Überschrift[/x_custom_headline]

Die erste Überschrift müsste mit <h2>...</h2> und die zweite mit <h3></h3> ersetzt werden.

Mit der aktuellen Abfrage wird der vordere Teil der 2. Headline nicht ersetzt, aber der hintere Teil [/x_custom_headline] ebenfalls durch ein <h2>, was an der Stelle dann falsch ist (hier müsste ja ein <h3> stehen).

Kann man die Anfrage so erweiteren, dass man diese Logik noch mit aufnimmt? Oder geht das an der Stelle dann doch nicht mehr?

Und wenn ich nur einen Teil meiner Posts erstmal ändern will, kann ich dann den letzten Teil der Abfrage WHERE post_content LIKE '%[/x_custom_headline]%'; irgendwie erweitern mit einem AND ID = (1-500)?

Sorry, das ich in SQL nicht so fit bin, daher hoffe ich auf Eure Unterstützung :)
 
Werbung:
Zurück
Oben