需要MySQL查询删除超过X天的WordPress帖子和发布元

时间:2010-01-28 22:25:08

标签: sql mysql wordpress

我开设了一个博客,社区可以发布时间敏感的社区链接(体育比分等)。
经过一段时间后,这些帖子不再有用了,所以我想通过MySQL查询批量删除它们,但我不知道怎么做。我想完全摆脱这些帖子不仅仅是从the wp_posts表中删除,对吗?每个帖子还有其他工作表,不在吗?

我尝试了几个auto-batch-delete个插件,但它们的工作时间不到一半。

请您提供MySQL查询,以便从所有相关表格中删除超过X天的帖子及其作品吗?

1 个答案:

答案 0 :(得分:0)

如果不删除帖子,你只会将它们标记为已删除或草稿?您将获得相同的最终结果,但不会冒破坏数据库的风险。

当然,从长远来看,这将使您的数据库非常大,但对我来说这似乎是一种更简单,更安全的方法。作为奖励,任何信息都不会丢失。

编辑。

另一个方法可能是将帖子移到一个单独的类别,但如果你想像拆迁人那样做,那也很好: - )

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。您可能需要检查Database description,以确保全部完成。