MySQL - Shortcodes mit Befehl entfernen?

  • Hallo,

    kennt jemand einen MySQL Befehl, um Shortcodes mit dem Inhalt der dazwischenliegt zu entfernen?

    Ich habe ein Amazon Plugin genutzt und möchte dies nun entfernen, aber übrig bleiben dann die Shortcodes.

    Entfernt werden soll der Shortcode selbst am Anfang [amazon] und ende [/amazon], aber eben auch alles was dazwischen liegt.

    Kennt sich jemand damit aus?

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Mysql ist nicht mein Ding, alternativ hätte ich folgenden Code für die Functions.php ( Funktioniert vermutlich nur wenn das amazon plugin deaktviert ist )
    function amazon_shortcode( $atts, $content = null ) { return ''; } add_shortcode( 'amazon', 'amazon_shortcode' );

    Digitaler Rucksack Nomade

  • Ich bedanke mich erst einmal, denn der Code funktioniert recht gut. Leider löst er aber natürlich das Problem nicht, denn ich will den überflüssigen Inhalte ja entfernen.

    Dennoch hast du mir den Hals gerettet, denn so wird er ausgeblendet und ist zumindest vorläufig weg.

    Vielen vielen vielen Dank!

    Gruss
    Mike

    PS: Falls jemand doch noch einen MySQL LöschBefehl kennt.. her damit.

  • 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:

    SQL
    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!


    SQL
    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

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Erst einmal DANKE.

    Der Code zum anzeigen funktioniert perfekt und listet mir die entsprechenden Werte auf.

    Der Code zum löschen geht allerdings NICHT und bringt keinerlei Ergebnis.

  • Hmmm, ich habe noch einen kleinen Fehler in meinem Code entdeckt, der aber praktisch nichts an der Ausführung ändern sollte:

    Code
    ...
    WHERE `post_content` LIKE '%[amazon]%'
    AND `post_content` LIKE '%[/amazon]%'


    Beim zweiten LIKE muß da natürlich [/amazon] stehen. Ich will damit ja prüfen, ob Start- und End-Shortcode vorhanden sind.

    Was heißt, der Code zum löschen bringt kein Ergebnis? Stehte da "0 Zeilen betroffen." oder etwas Ähnliches? Irgendwas gibt doch phpMyAdmin auf jeden Fall aus.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Folgendes wird ausgegeben:

    db10101020-wordpress`.`wp_posts SET`

    1 Zeilen in 0.3795 Sekunde(n) abgearbeitet.

    Es wurden 0 DROP-, 0 CREATE-, 0 INSERT-, 1 UPDATE-Befehle ausgeführt
    Es gab 0 Kommentare
    0001: 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]%'

  • Seltsam. Wieviele Treffer liefert denn die Kontroll-Anweisung (mein erster SQL-Befehl)?

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Hmmm, die Anzahl hängt in beiden Fällen nur vom WHERE-Teil der SQL-Abfrage ab. Sie muß also beim Abfrage- und Set-SQL-Befehl identisch sein. Sicher, daß in beiden Fällen der WHERE-Teil identisch ist?

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Genau das habe ich mir kopiert und so eingegeben... irgendetwas falsch gemacht?


    Beim ersten hatte ich es vorher so versucht:

    SQL
    UPDATE `wp_posts`
    SET `post_content` = REPLACE( `post_content` , CONCAT( '[asa]', SUBSTRING( `post_content` , LOCATE( '[asa]', `post_content` ) +8, LOCATE( '[/asa]', `post_content` ) - LOCATE( '[asa]', `post_content` ) -8 ) , '[/asa]' ) , '' )
    WHERE `post_content` LIKE '%[asa]%'
    AND `post_content` LIKE '%[asa]%'

    Der Shortcode selbst geht so: [asa]ASINnummer123456[/asa]

  • Muß mich korrigieren. Die Anzahl hängt beim UPDATE auch davon ab, ob tatsächlich etwas geändert wurde. So intelligent ist MySQL dann schon, daß nicht ein Feldinhalt unverändert mit sich selbst ersetzt wird.

    Ungeachtet dessen hat es bei meinem Test bestens funktioniert. Waren zwar im ersten Durchklauf nur drei Datensätze und dann ein Datensatz, aber das ist egal.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Was zeigt denn nun das hier an:

    SQL
    SELECT `ID`,`post_title`,CONCAT( '[asa]', SUBSTRING( `post_content` , LOCATE( '[asa]', `post_content` ) +8, LOCATE( '[/asa]', `post_content` ) - LOCATE( '[asa]', `post_content` ) -8 ) , '[/asa]' )
    FROM `wp_posts`
    WHERE `post_content` LIKE '%[asa]%' AND `post_content` LIKE '%[/asa]%'

    Immer noch die 1600 Datensätze?

    Update: Ich habs, die 8 muß natürlich jeweils durch eine 5 ersetzt werden, [asa] ist ja nur 5 Zeichen lang.

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

    Einmal editiert, zuletzt von Putzlowitsch (31. Mai 2012 um 14:10)

  • Ich habs, die 8 muß natürlich jeweils durch eine 5 ersetzt werden, [asa] ist ja nur 5 Zeichen lang. Hättest mal gleich oben den richtigen Shortcode nennen sollen. :-)

    Gruß
    Ingo

    Wenn ich helfen konnte, bitte [ Gefällt mir ] klicken. :-)

  • Danke!

    Hat geklappt. Möchte mich wirklich für deine Mühe und den Einsatz bedanken. Ist nicht selbstverständlich. Endlich bin ich die ungenutzten Shortcodes los. Danke Danke Danke!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!