WordPress verwaltet so ziemlich alles in einer Datenbank. Egal ob Settings, Artikel, Kommentare usw. Dabei legt WordPress auch allerlei “Mist” an. So enthält dieser Blog bereits über 70 Einträge in der wp_posts Tabelle, obwohl der Blog nur gerade mal 2 Beiträge hat. WP sieht hier keine Aufräummöglichkeit vor. Man kann aber händisch so manches erledigen. So kann man üblicherweise die Größe der Datenbank auf einen Bruchteil reduzieren, was Performance und Speicherplatz bringt. Aber auch die Administration ist teilweise direkt in der Datenbank deutlich schneller erledigt. Hier die besten DB-Queries für WordPress Blogger.
Zuerst sollte man mal ein Backup seiner Datenbank anlegen. Jede Aktion direkt an der Datenbank kann WordPress lahm legen. Also alle Tipps hier auf eigene Verantwortung. Dann geht man am einfachsten über eine Admin Oberfläche wie phpMyAdmin zur Datenbank. Hier lassen sich SQL Befehle eingeben…
Unnötige Posts aufräumen
Zuerst nehmen wir uns mal die eingangs erwähnten doppelten Posts vor. Jedes Mal, wenn ein Artikel gespeichert wird legt WP einen neuen Tabelleneintrag an. Erfreulicherweise kann man die alten Einträge einfach löschen, weil WP diese nicht mehr benötigt. Man hat aber natürlich damit auch keinen Zugriff mehr auf alte Versionen des Beitrags. Am einfachsten ist es alle Posts zu löschen, die nicht den post_status publish oder draft besitzen. Das sind Autosicherungen, Revisionen, alte Versionen usw. Posts die aktuell am Blog sichtbar sind haben den Status publish. Will man seine Entwürfe aufheben muss man eben auch noch die “drafts” behalten. Ausserdem “retten” wir die Attachments. Diese werden ebenfalls als “Posts” gespeichert. Würde man diese löschen, würde das den Blog nicht beeinflussen, aber in der Mediathek sind die Attachements dann nicht mehr verfügbar.
1 |
DELETE FROM wp_posts WHERE post_status != "publish" AND post_status != "draft" AND post_type != "attachment"; |
Zing. Schon hat man nur noch einen Bruchteil der Einträge in der wp_posts. Will man die jüngeren Revisionen noch aufheben, so kann man noch ein Zeitlimit einbauen. z.B.
1 |
DELETE FROM wp_posts WHERE post_status != "publish" AND post_status != "draft" AND post_type != "attachment" AND post_date < DATE_SUB(now(), interval 30 day); |
So bleiben alle Versionen von Artikeln gespeichert, die jünger als 30 Tage sind.
Dann sollte man noch Daten die zu den gelöschten Posts gehört haben wegwerfen. Zuerst alle “postmetas” löschen, die keinen zugehörigen Post mehr besitzen.
1 |
DELETE FROM wp_postmeta WHERE post_id NOT IN ( SELECT ID FROM wp_posts ); |
Dann gehören noch die term_relationships gelöscht, die auf verwaiste Posts zeigen.
1 |
DELETE FROM wp_term_relationships WHERE object_id NOT IN ( SELECT ID FROM wp_posts ); |
Kommentare aufräumen
Weiter mit den Kommentaren. Hier sammeln sich bei spamgeplagten Blogs Unmengen an Einträgen. Ansatzpunkt bietet hier am ehesten die Spalte “comment_approved”. Hier gibt es die Werte 1 (genehmigt), 0 (nicht genehmigt), spam, post_trashed und trash. Am einfachsten ist es also die Kommentare in der Warteschlange abzuarbeiten (In der Admin Area) und dann alle Kommentare zu löschen, die nicht “approved” sind. Somit werden alle Spam Kommentare, alle nicht genehmigten Kommentare und alle Kommentare deren Post gelöscht wurde aus der DB gelöscht.
1 |
DELETE FROM wp_comments WHERE comment_approved != 1; |
Hauptgrund für Kommentarspam ist natürlich das Backlinking. Der “Kommentator” trägt eine Webpage als seine Webpage ein und erhält so einen Backlink. Will man eine bestimmte Seite nicht verlinken, so kann man entweder Kommentare löschen, die eine bestimmte Webadresse eingetragen haben.
1 |
DELETE FROM wp_comments WHERE comment_author_url LIKE "%ungewollteDomain.com%"; |
Der “LIKE” Suchstring bietet sich an, weil so auch alle Unterseiten, Subdomains etc. erwischt werden. Gibt es Antworten auf den gelöschten Beitrag (was bei Spameinträgen eher selten der Fall ist), werden diese trotzdem einfach angezeigt.
Alternative ist es die Urls einfach zu löschen und den Kommentar stehen zu lassen.
1 |
UPDATE wp_comments SET comment_author_url = '' WHERE comment_author_url LIKE "%ungewollteDomain.com%"; |
Zu den Kommentaren gehört auch die Tabelle wp_commentmeta. Probleme kann diese Tabelle bei der Anwendung von alten Askimet Plugins machen. Hier werden verwaiste Einträge nicht gelöscht, so soll es Blogs geben bei denen diese Tabelle mehrere hundert MB bekommen hat. Es macht auf jeden Fall Sinn alle Metas zu löschen, zu denen es keinen Kommentar mehr gibt.
1 |
DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments); |
Askimet legt commentmetas an, die nicht wirklich brauchbar sind. Auch diese füllen die DB relativ rasch mit Daten. Also werfen wir noch alle askimet Einträge raus.
1 |
DELETE FROM wp_commentmeta WHERE meta_key LIKE '%akismet%'; |
Will man in Zukunft etwas weniger mit Spam gequält werden, so kann man einfach die Kommentarfunktion für ältere Posts sperren.
1 |
UPDATE wp_posts SET comment_status = 'closed' WHERE post_status = 'publish' AND post_date < DATE_SUB(now(), interval 30 day); |
Tags aufräumen
Durch löschen von Posts etc. gibt es im Laufe der Zeit viele verwaiste Tags in der term Datenbank. Diese kann man aufräumen. Der Performancevorteil wird begrenzt sein, aber unangehm ist es wenn Tags, die gar nicht in Verwendung sind bei Tagclouds etc. erscheinen. Ein Klick darauf führt dann auf eine 404 Seite. Unschön, also weg mit den unbenützten Tags.
1 |
DELETE FROM wp_terms INNER JOIN wp_term_taxonomy ON wp_terms.term_id=wp_term_taxonomy.term_id WHERE wp_term_taxonomy.taxonomy='post_tag' AND wp_term_taxonomy.count=0; |
Administration in der Datenbank
Manche Sachen lassen sich über die WP-Administration gar nicht durchführen, manche nur sehr langwierig, die richtige Quert parat haben ist da Gold wert…
Passwort “recovern”
Passwort futsch? Kein Problem:
1 |
UPDATE wp_users SET user_pass = MD5("NEUE PASSWORT") WHERE user_login = "DEIN USERNAME"; |
Artikel anderem User zuteilen
Vermutlich kennt jeder WordPress Blogger das Problem. Man beginnt voller Enthusiasmus mit dem Bloggen und irgendwann stellt man dann fest, dass “Admin” als Bloggername wenig sexy ist. Also legt man einen neuen User an, aber wie die alten Artikel alle dem neuen User zuordnen? Such dir zuerst in der Tabelle wp_users die IDs der beiden User (alter User, neuer User). Dann führe folgende Quert aus.
1 |
UPDATE wp_posts SET post_author = "neue User ID" WHERE post_author = "alte User ID"; |
Alternativ kannst du auch einfach den Namen des alten Users ändern. Die hat allerdings den Nachteil, dass du immer als “Admin” postest und dein Zugang Administartionsrechte besitzt. Nicht jeder möchte diese Sicherheitslücke.
- Info:
- WordPress Datenbank manuell bearbeiten ist Beitrag Nr. 64
- Author:
- codingFreak am 30. April 2014 um 14:49
- Category:
- Wordpress
« WordPress 3.9 Editor Tiny MCE tunen - Werbung im WordPress Artikel automatisch einblenden »