Как насчет того, чтобы вместо удаления сообщений вы просто отмечали их как помеченные или черновики? Вы достигнете того же конечного результата, но не рискуете повредить базу данных.
Это, конечно, в долгосрочной перспективе сделает вашу базу данных очень большой, но мне это кажется более простым и безопасным подходом. В качестве бонуса информация также не будет потеряна.
Редактировать.
Другим подходом может быть перемещение сообщений в отдельную категорию, но если вы хотите сделать как «Разрушитель», это тоже хорошо: -)
1) Find all eligible posts and their attachments
SELECT wp_posts.ID, att.ID
FROM wp_posts
LEFT JOIN wp_posts att ON att.post_parent = wp_posts.ID
WHERE wp.posts.post_date < EXPIRATION_DATE;
2) Find all related comments
SELECT wp_comments.comment_ID
FROM wp_comments
WHERE comment_post_ID IN ( <post ID:s selected in 1)> )
3) Delete all meta related to posts and comments, then comments, then posts
DELETE FROM wp_commentmeta WHERE comment_id IN ( <comment ID:s selected in 2)> )
DELETE FROM wp_postmeta WHERE post_id IN ( <post ID:s selected in 1)> )
DELETE FROM wp_term_relationships WHERE object_id IN ( <post ID:s selected in 1)> )
DELETE FROM wp_comments WHERE comment_ID IN ( <comment ID:s selected in 2)> )
DELETE FROM wp_posts WHERE ID IN ( <post ID:s selected in 1)> )
Да, некоторые из них можно объединить, но мне нравится, чтобы все было как можно проще.
Таблицы и имена столбцов взяты из моего WP 3.0-alpha. Возможно, вы захотите проверить Описание базы данных , чтобы убедиться, что вы все поняли.