2013-02-23 34 views
0

我正在構建一個平臺,允許成員創建教科書,課程,教室和「實驗室」。有沒有辦法只允許某些成員存儲比3個版本更多的內容?限制修改特定角色(在WordPress中)

我想,也許我可以做一個檢查,如:

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

,每個人都被限制在3,除了那些與'store_unlimited_revisions'。但是,如果已經有10個修訂版,並且您定義了3個修訂版,則只有最新的3個修訂版纔會保存,其他修訂版會在您創建新修訂版時被刪除。

會這樣嗎?如果具有角色(A)的人在沒有角色(B)的人員面前保存一個時刻,A人是否會因爲B是最後一個定義修訂限制的人而失去他們的修改?

如果不是,還有其他方法可以在保存時刪除3以上的最舊版本嗎?

+0

你也可以在這裏嘗試[Wordpress on Stackexchange](http://wordpress.stackexchange.com)。我可以挖掘一些SQL來清除我過去使用過的舊版本,也許這可以適合你想要做的事情? – Sepster 2013-02-23 16:30:37

+0

嗯,可以工作。如果我可以幫忙的話,我寧願不直接使用SQL。我剛剛發現了'save_post'動作和'get_children'標籤,它會返回修訂版本。我想我可以用這兩種方法來解決問題。 – 2013-02-23 17:14:39

回答

1

重新您的第一個「這項工作可以嗎?」問題 - 說實話,我不熟悉如何使用這個常量,也不知道如何/何時根據這個常數清除修訂版,所以我不能回答那個抱歉。我想你自己試試吧。

重新「另一種方式」,這是我該怎麼做。像這樣將撤出所有修訂特定職位ID:(包含在where子句中post_name like '{$id_of_post_being_saved}-revision%'排除例如自動保存)

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 

然後可以(返回PHP)確定返回的修訂計數是否超過3,並按post_name(例如「425-revision」,「425-revision-2」,「425-revision-3」等進行排序版本號爲425的修訂版)或post_date以獲得「最早的」修訂版(無論邏輯是否滿足您的需求,基本上 - 我會推薦一些研究/實驗來確認邏輯實際上將隔離您之後的版本,儘管,因爲我沒有在實踐中自己做這個事情)

現在,這個代碼我在實踐中使用,刪除所有職位的所有修訂所有舊版草稿在基於WP的b上發佈之前生成rochure式的網站):

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中處理「智能」,以便您可以更輕鬆地調整邏輯(例如,3個以上的修訂規則)米可在WP/PHP等

+0

謝謝brotha,我申請了這個,它工作。坦率地說,我不是直接訪問數據庫的粉絲,但在這種情況下,因爲我是唯一的開發人員,我完全控制我不介意。謝謝! – 2013-02-24 00:26:48

+0

我的快樂伴侶,很高興它幫助。原則上,我同意你的看法,但在一天結束時,如果WP沒有提供你想要的內容,那麼某種類型的數據庫訪問將是必要的。理想情況下,一個插件可能已經存在,可以完成你所追求的內容,但我認爲現在由你來創建它;-)(如果你願意的話,請給我一條線!)。我想你可以使用WP API將這個SQL傳遞給數據庫,但是我沒有在這方面做太多的工作,所以我不確定通過例如wp_query得到什麼,以及它是否足夠靈活。看看WP現有的刪除代碼,看看它有什麼作用? – Sepster 2013-02-24 04:29:24