0

我正在构建一个平台,允许会员创建教科书、课程、教室和“实验室”。有没有办法只允许某些成员存储超过 3 个修订版?

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

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

除了那些有'store_unlimited_revisions'. 但是,如果已经有 10 个修订并且您定义了 3 个,那么当您创建新修订时,只会保存最新的 3 个,其余的会被删除。

这行得通吗?如果具有角色 (A) 的人在没有角色 (B) 的人之前保存了一个瞬间,那么 A 会丢失他们的修订,因为 B 是最后一个定义修订限制的人吗?

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

4

1 回答 1

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”等,以获取帖子 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 个修订规则)。

于 2013-02-23T18:00:57.880 回答