【问题标题】:Need MySQL Queries to delete WordPress Posts and Post Meta more than X Days Old需要 MySQL 查询来删除超过 X 天的 WordPress 帖子和发布元数据
【发布时间】:2023-03-08 08:14:01
【问题描述】:

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

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

请问,您能否提供一个 MySQL 查询以从所有相关表中删除超过 X 天的帖子及其片段?

【问题讨论】:

标签: sql mysql wordpress


【解决方案1】:

您不删除帖子,而是将其标记为已删除或草稿,怎么样?您将获得相同的最终结果,但不会冒损坏数据库的风险。

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

编辑。

另一种方法是将帖子移至单独的类别,但如果您想像 Demolition man 那样做,那也很好:-)

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 以确保您了解所有信息。

【讨论】:

  • 嗯。我宁愿删除它们。但是,如果我能得到的只是把它们变成垃圾的问题,我很乐意接受它们。
  • 使用这种方法,您必须小心,您的任何小部件或插件都不会缓存帖子数据,否则您必须弄清楚如何清除它们的缓存。我认为您最好编写自己的插件,该插件使用 wp_schedule_event 使用 Wordpress cron 安排工作,然后使用 wp delete post 删除帖子,这样所有相关的注册过滤器和操作都将被执行——尽管显然这会表现不佳。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多