WordPress: Artikel umhängen

Wenn die Notwendikeit besteht, Artikel einem anderen Benutzer zuzuordnen, weil man zum Beispiel über Monate hinweg neue Artikel als Administrator verfaßt hat, und nun erkennt, daß /wp_admin/ zum festen Bestandteil der URL der Autoren geworden ist, kann man diese Anpassungen direkt in der Datenbank vornehmen.

Bei der Neuanlage eines Benutzers, zum Beispiel als Redakteur, fällt auf, daß die E-Mail-Adresse nicht doppelt vorkommen darf. Die weiteren Schritte sind selbsterklärend. Ein neuer Benutzer wird in der Tabelle wp_users mit einer neuen ID hinterlegt. Diese IDs werden in den Tabellen wp_posts vollständig und wp_postmeta teilweise referenziert. Zunächst kann man sich sehr einfach einen Überblick über die verschiedenen Post-Typen und Post-Stati der Tabelle wp_posts verschaffen:

Abfrage:

SELECT post_status, post_type, COUNT(*) AS 'Anzahl'
FROM wp_posts
GROUP BY post_status, post_type;

Ausgabe:

post_status post_type Anzahl  
auto-draft post 3  
inherit attachment 36  
inherit revision 10  
publish nav_menu_item 6  
publish page 5  
publish post 32  

Die echten, veröffentlichten Artikel verfügen also über die Merkmale »publish« und »post« und sollten in der Anzahl mit den tatsächlichen Posts übereinstimmen. Auch Einträge wie Seiten und Menus haben einen Benutzerbezug. Die Attachments sind die Bilder/Dateien aus der Mediathek.

In der Tabelle wp_postmeta wird neben der ID des Posts unter anderem der Benutzer festgehalten, der zuletzt einen Post modifiziert hat. Enthält das Feld wp_postmeta.meta_key den Schlüssel »_edit_last«, dann weist das Feld wp_postmeta.meta_value auf die ID des Benutzers. Die Systemrelevanz ist an dieser Stelle nicht klar, aber bei Änderungen in der Tabelle wp_posts sollten auch hier entsprechende Anpassungen vorgenommen werden. Ebenfalls unklar ist, ob auch die IDs der Datensätze für die Attachments in wp_posts umgelegt werden sollten.

Angenommen, alle Artikel/Posts wurden bisher vom Administrator (ID = 1) geschrieben und sollen jetzt an den neu erstellten Redakteur (ID = 2) umgehängt werden, dann würde das in zwei Schritten erfolgen. Die Feldinhalte wp_posts.post_author müssen auf die neue ID 2 eingestellt werden, sofern Post-Status und Post-Type auf »publish« und »post« stehen:

UPDATE wp_posts SET post_author = 2
WHERE post_author = 1 AND
(post_status = 'publish' AND post_type = 'post');

Als nächstes wird noch die Tabelle wp_postmeta angepaßt. Dies ist etwas aufwendiger, da nur die »_edit_last« Positionen korrigiert werden sollen, deren post_id auf einen Datensatz in der wp_posts zeigen, die die Post-Status und Post-Type Eigenschaften »publish« und »post« erfüllen. Zunächst erst mal nachsehen:

SELECT pome.* FROM wp_postmeta AS pome
LEFT JOIN wp_posts AS po ON pome.post_id = po.ID
WHERE pome.meta_key = '_edit_last' AND
pome.meta_value = '1' AND
po.post_status = 'publish' AND
po.post_type = 'post';

Wenn dieser SQL-Query das gewünschte Resultat geliefert hat, dann kann ein entsprechendes Update durchgeführt werden:

UPDATE wp_postmeta AS pome 
LEFT JOIN wp_posts AS po ON pome.post_id = po.ID
SET pome.meta_value = '2'
WHERE pome.meta_key = '_edit_last' AND
pome.meta_value = '1' AND
po.post_status = 'publish' AND
po.post_type = 'post';

rh2011-08-002