首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制对特定角色的修订(在WordPress中)

限制对特定角色的修订(在WordPress中)
EN

Stack Overflow用户
提问于 2013-02-24 00:26:06
回答 1查看 56关注 0票数 0

我正在搭建一个允许成员创建教科书、课程、教室和“实验室”的平台。有没有办法只允许某些成员存储3个以上的修订?

我想也许我可以做这样的检查:

if(!has_cap('store_unlimited_revisions')) define('WP_REVISIONS', 3);

其中每个人都被限制为3个,除了那些使用'store_unlimited_revisions'的人。但是,如果已经有10个修订,并且您定义了3个修订,则在创建新修订时,将只保存最新的3个修订,其余的将被删除。

这样行得通吗?如果具有角色(A)的人员在不具有角色(B)的人员之前保存了一个瞬间,则人员A是否会因为人员B是最后一个定义修订限制的人员而丢失其修订?

如果没有,有没有其他方法可以在保存时删除3以上的最旧版本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-24 02:00:58

你的第一个问题是“这样可以吗?”问题--老实说,我不熟悉这个常量是如何使用的,也不知道基于这个常量的修订是如何/何时被清除的,所以我不能回答这个问题。我想,你自己试试吧。

你是“另一种方式”,这是我会怎么做的。类似下面这样的代码将会删除给定帖子ID的所有修订:

代码语言:javascript
复制
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的宣传册网站上发布之前清理所有旧的草稿):

代码语言:javascript
复制
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子句中添加以下代码来实现此目的:

代码语言:javascript
复制
 and a.id = {$post_id_to_delete}

注意:这一切都可以在一个聪明的SQL语句中实现,例如,在第一个结果集和第一个结果集的分组最大值之间使用自连接,然后根据该结果集删除...但就我个人而言,我会在PHP中处理“智能”,这样你就可以更容易地根据WP/PHP等中可用的参数来调整逻辑(例如,旧于3个版本的规则)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15042717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档