0

メンバーが教科書、コース、教室、および「ラボ」を作成できるプラットフォームを構築しています。特定のメンバーだけが、たとえば 3 つ以上のリビジョンを保存できるようにする方法はありますか?

次のようなチェックができるのではないかと思いました。

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

を持つ人を除いて、誰もが3つに制限されている場所'store_unlimited_revisions'. ただし、すでに 10 のリビジョンがあり、3 つを定義すると、最新の 3 つだけが保存され、新しいリビジョンを作成するときに残りは削除されます。

これは機能しますか?役割 (A) を持つ人が、役割を持たない人 (B) よりも前にインスタントを保存した場合、人 B が改訂制限を定義した最後の人であるため、人 A は改訂を失うでしょうか?

そうでない場合、保存時に 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(たとえば、投稿 ID 425 のリビジョンの「425-revision」、「425-revision-2」、「425-revision-3」など)。 )または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これはすべて、1つの巧妙なSQLステートメントで実装できます。たとえば、最初の結果セットと最初の結果セットのグループ化された最大値の間で自己結合を使用し、それに基づいて削除します...しかし、個人的には「スマート」を処理しますWP/PHP などで利用可能なパラメーターに基づいて、ロジック (たとえば、3 つ以上のリビジョン ルール) をより簡単に調整できるようにします。

于 2013-02-23T18:00:57.880 に答える