Die MySQL-Lösung
Voraussetzung:
- [amazon] ist immer gleich (z.B. klein) geschrieben und enthält keine Parameter
- [/amazon] ist immer gleich (z.B. klein) geschrieben
- [amazon] und [/amazon] sind immer zusammen enthalten
z.B. im phpMyAdmin ausführen
So werden alle Artikel angezeigt (zur Kontrolle), die mindestens einmal den Amazon-Shortcode enthalten:
SELECT `ID`,`post_title`,CONCAT( '[amazon]', SUBSTRING( `post_content` , LOCATE( '[amazon]', `post_content` ) +8, LOCATE( '[/amazon]', `post_content` ) - LOCATE( '[amazon]', `post_content` ) -8 ) , '[/amazon]' )
FROM `wp_posts`
WHERE `post_content` LIKE '%[amazon]%'
AND `post_content` LIKE '%[amazon]%'
So werden die Amazon-Shortcodes mit Inhalt gelöscht. Vorher die Tabelle wp_posts oder die gesamte Datenbank sichern!
UPDATE `wp_posts`
SET `post_content` = REPLACE( `post_content` , CONCAT( '[amazon]', SUBSTRING( `post_content` , LOCATE( '[amazon]', `post_content` ) +8, LOCATE( '[/amazon]', `post_content` ) - LOCATE( '[amazon]', `post_content` ) -8 ) , '[/amazon]' ) , '' )
WHERE `post_content` LIKE '%[amazon]%'
AND `post_content` LIKE '%[amazon]%'
Die SQL-Anweisung löscht pro Aufruf pro Post nur einen Shortcode. Gibt es in Posts auch zwei oder mehrere Shotcodes, ist der SQL-Befehl zu wiederholen, bis als Ergebnis "0 Zeilen betroffen" rauskommt.
Gruß
Ingo