我正在搭建一个允许成员创建教科书、课程、教室和“实验室”的平台。有没有办法只允许某些成员存储3个以上的修订?
我想也许我可以做这样的检查:
if(!has_cap('store_unlimited_revisions')) define('WP_REVISIONS', 3);
其中每个人都被限制为3个,除了那些使用'store_unlimited_revisions'的人。但是,如果已经有10个修订,并且您定义了3个修订,则在创建新修订时,将只保存最新的3个修订,其余的将被删除。
这样行得通吗?如果具有角色(A)的人员在不具有角色(B)的人员之前保存了一个瞬间,则人员A是否会因为人员B是最后一个定义修订限制的人员而丢失其修订?
如果没有,有没有其他方法可以在保存时删除3以上的最旧版本?
发布于 2013-02-24 02:00:58
你的第一个问题是“这样可以吗?”问题--老实说,我不熟悉这个常量是如何使用的,也不知道基于这个常量的修订是如何/何时被清除的,所以我不能回答这个问题。我想,你自己试试吧。
你是“另一种方式”,这是我会怎么做的。类似下面这样的代码将会删除给定帖子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(包含在where子句中以排除自动保存的post_name like '{$id_of_post_being_saved}-revision%')。
然后可以(回到PHP中)确定返回的修订数量是否超过3,并对修订进行排序(例如“425- post_name”,"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}注意:这一切都可以在一个聪明的SQL语句中实现,例如,在第一个结果集和第一个结果集的分组最大值之间使用自连接,然后根据该结果集删除...但就我个人而言,我会在PHP中处理“智能”,这样你就可以更容易地根据WP/PHP等中可用的参数来调整逻辑(例如,旧于3个版本的规则)。
https://stackoverflow.com/questions/15042717
复制相似问题