你的第一个“这行得通吗?” 问题 - 老实说,我不熟悉该常量的使用方式,也不具体是如何/何时根据该常量清除修订版,所以我无法回答这个抱歉。自己试试吧,我猜。
重新“另一种方式”,这就是我的做法。像这样的东西会提取给定帖子 ID 的所有修订:
SELECT
ID
FROM
wp_posts
WHERE
post_parent = {$id_of_post_being_saved}
and
post_type = 'revision'
and
post_name like '{$id_of_post_being_saved}-revision%'
ORDER BY
id
(post_name like '{$id_of_post_being_saved}-revision%'
包含在 where 子句中以排除例如自动保存)。
然后可以(回到 PHP 中)确定返回的修订数是否超过 3,并排序post_name
(例如,“425-revision”、“425-revision-2”、“425-revision-3”等,以获取帖子 id 425 的修订) 或post_date
继续获得“最旧”的修订版(基本上,无论逻辑满足您的需求 - 无论哪种方式,我都建议您进行一些研究/实验以确认逻辑实际上会隔离您所追求的修订版,尽管我正在拉这不是我自己在实践中自己做过的!)
现在,我在实践中使用此代码删除所有帖子的所有修订(即在基于 WP 的小册子网站上发布生产之前清理所有旧草稿):
DELETE
a,b,c
FROM
wp_posts a
LEFT JOIN wp_term_relationships b
ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c
ON (a.ID = c.post_id)
WHERE
a.post_type = 'revision'
但是现在您已经有了ID
想要敲击头部的特定帖子的特定修订版的帖子(来自第一个查询),请将以下内容添加到上面的 where 子句中以执行此操作:
and a.id = {$post_id_to_delete}
NB 这都可以在一个聪明的 SQL 语句中实现,例如,通过在第一个结果集和第一个结果集的分组最大值之间使用自连接,然后基于此删除......但我个人会处理“智能” " 在 PHP 中,以便您可以根据 WP/PHP 等中可用的参数更轻松地调整逻辑(例如,超过 3 个修订规则)。