Ich habe eine Tabelle namens “wp-posts” mit einem Feld “post-content”. Dieses Feld enthält den Text für einen Blogbeitrag. Ich möchte alle Datensätze ändern, um eine URL durch eine andere zu ersetzen.
Stellen Sie sich vor, ich könnte Dinge haben wie:
Dies ist ein Test und irgendwo steht so etwas wie oldurl.com/etwas”>einen Link.”
Ich möchte, dass es so ist
Dies ist ein Test und irgendwo steht so etwas wie newurl.com/etwas”>einen Link.”
Ich muss dies für jeden Datensatz in meiner Tabelle ändern können, ohne jeden Beitrag in WordPress öffnen und von Hand ändern zu müssen. Es muss einen Weg geben, dies zu tun
Dies kann leicht mit einer einfachen SQL-Anweisung unter Verwendung von MySQL erreicht werden replace()
Funktion. Bevor wir das tun, sollten Sie auf jeden Fall einen Datenbank-Dump oder was auch immer Sie für Backups verwenden, erstellen. Es ist nicht nur The Right Thing To Do™, sondern wenn Sie bei Ihrer Ersetzung einen Fehler machen, kann es sich als schwierig erweisen, ihn rückgängig zu machen (ja, Sie könnten einen Rollback durchführen, aber Sie werden Ihren Fehler möglicherweise erst später herausfinden).
Um einen Datenbank-Dump von MySQL zu erstellen, können Sie so etwas ausführen —
mysqldump -h hostname -u username -p databasename > my_sql_dump.sql
Wo (und das wissen Sie wahrscheinlich, aber der Vollständigkeit halber für zukünftige Generationen…) —
- Hostname ist ein Platzhalter für den Hostnamen der Datenbank. Wenn der Datenbankserver auf Ihrem eigenen Rechner läuft, können Sie entweder „localhost“ verwenden oder das „-h hostname“ einfach ganz weglassen
- Nutzername ist ein Platzhalter für den Benutzer mit der Berechtigung, einen Dump auf der Datenbank auszuführen. Dies ist oft ein Administrator, aber wenn es sich um eine gemeinsam genutzte Datenbank handelt, könnten Sie es einfach sein.
- Name der Datenbank ist der Name der gesamten Datenbank, die Ihre Tabellen enthält. (Beachten Sie, dass das „-p“ nichts mit diesem Datenbanknamen zu tun hat. „-p“ zeigt an, dass MySQL Sie nach einem Passwort fragen soll, um sich anzumelden.)
Jetzt, da wir das aus dem Weg geräumt haben, können Sie sich bei der MySQL-Datenbank anmelden mit:
mysql -h hostname -u username -p databasename
Und führen Sie einfach diese Anweisung aus:
UPDATE `wp-posts` SET `post-content` = REPLACE(`post-content`, "http://oldurl.com", "http://newurl.com");
Und das sollte es tun!
Wenn Sie einen Fehler machen, können Sie die Anweisung oft erneut ausführen, wobei der ursprüngliche und der neue Text vertauscht sind (wenn der neue Text – in Ihrem Fall die neue URL – nicht bereits im Text vorhanden war, bevor Sie die Ersetzung vorgenommen haben). Manchmal Dies ist nicht möglich, je nachdem, wie der neue Text lautete (wiederum in Ihrem Fall nicht wahrscheinlich). Auf jeden Fall können Sie jederzeit versuchen, den SQL-Dump wiederherzustellen —
cat my_sql_dump.sql | mysql -h hostname -u username -p databasename
Und voilà.
Verwenden Sie die Zeichenfolgenfunktion ersetzen bei mysql:
UPDATE MyTable SET textfield = REPLACE(textfield, "http://oldurl.com/", "http://newurl.com")
Es gibt ein praktisches WordPress-Plugin, das ich zum Suchen und Ersetzen in Beitragsseiten mit grep verwendet habe:
http://urbangiraffe.com/plugins/search-regex/
Ich habe kürzlich verwendet http://wordpress.org/extend/plugins/search-and-replace/ um eine Site von einem Entwicklungsserver auf den öffentlichen Server zu aktualisieren. Ich habe das Plugin verwendet, um alle URLs von Bildern von ihrem “00.00.00.00/~user/” in ihr “example.com”-Format zu ändern.
Es funktionierte perfekt.
Stellen Sie natürlich sicher, dass Sie zuerst die Datenbank sichern, falls Sie während des Vorgangs einen Tippfehler machen.
Es gibt ein paar Stellen, an denen das geklärt werden kann.
- Sichern Sie Ihre Datenbank
- Versuchen Sie, das interne Dienstprogramm von WordPress zu verwenden
- Suchen Sie nach Übereinstimmungen
- Schreiben Sie Ihr eigenes Suchen und Ersetzen
Verfahren
1. Sichern Sie Ihre Datenbank
Ich gehe generell so vor:
mysqldump -u dbuser -p'dbpassword' --complete-insert --default-character-set=utf8 databasename > /home/renoirb/backups/databasename.sql
Ich habe dies sogar in einer Crontab auf meinem eigenen Server. Aber das ist ein anderes Thema.
2. Versuchen Sie, das interne Dienstprogramm von WordPress zu verwenden
WordPress hat für diese Angelegenheit ein eigenes Dienstprogramm. Meistens geht es nur damit.
Fügen Sie einfach zu Ihrem Thema hinzu functions.php
(siehe WordPress-Dokumentation) Datei die folgende Zeile:
update_option('siteurl','http://local.workspace/');
update_option('home','http://local.workspace/');
Angenommen, Sie führen bereits das Thema aus, das diese Besonderheit hat functions.php
Datei.
Führen Sie die Site aus, indem Sie die Seite aktualisieren.
Dann kommentiere die Zeilen!
Du wirst sie nicht mehr brauchen.
Andernfalls müssen sie Ihre Datenbankkonfiguration bei jedem Seitenladen aktualisieren.
Wenn es nicht genug ist, fahren Sie fort …
3. Suchen Sie nach Übereinstimmungen
Ich persönlich benutze Administrator Bei meiner Bereitstellung ist es ein einfacher Ersatz für PHPMyAdmin mit einer Datei.
Warum ich vorschlage Administrator? Es hat eine nette Funktion zum Durchsuchen aller Datenbanken, die ich in unserem Anwendungsfall recht praktisch finde.
Es ist ein Suchfeld mit der Bezeichnung: “Suche in Datentabellen”.
4. Schreiben Sie Ihr eigenes Suchen und Ersetzen
UPDATE `wp_comments` SET `comment_author_url` = REPLACE(`comment_author_url`, "http://url", "https://url");
UPDATE `wp_postmeta` SET `meta_value` = REPLACE(`meta_value`, "http://url", "https://url");
UPDATE `wp_options` SET `option_value` = REPLACE(`option_value`, "http://url", "https://url");
Beachten Sie, dass ich in meinem Fall ALLE meine URLs von NON HTTPS zu HTTPS migriert habe.
Hoffe das war hilfreich
13656600cookie-checkWie kann ich eine URL in einem Feld in MySQL ändern?yes