我正在建立一个平台,允许会员创建教科书,课程,教室和“实验室”。有没有办法只允许某些成员存储超过3个版本?
我想也许我可以做一下检查:
if(!has_cap('store_unlimited_revisions')) define('WP_REVISIONS', 3);
每个人都限制在3人,但'store_unlimited_revisions'
人除外。但是,如果已经有10个修订版并且您定义了3个,那么只保存最新的3个,并在创建新修订版时删除其余部分。
这会有用吗?如果具有角色(A)的人在没有角色(B)的人之前保存了一个瞬间,那么A人是否会失去他们的修订,因为B是最后一个定义修订限制的人?
如果没有,还有其他方法可以在保存时删除3以上最旧的版本吗?
答案 0 :(得分:1)
重新开始“你的工作会好吗?”问题 - 说实话,我不熟悉如何使用常量,也没有具体说明如何/何时基于该常数清除修订,所以我不能回答这个问题。我猜你自己试试。
重新“其他方式”,这就是我如何做到的。这样的事情将取消给定帖子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 “等对于post 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个修订规则)。