初めての「これでいいの?」質問 - 正直なところ、その定数がどのように使用されるか、また具体的にはその定数に基づいてリビジョンがどのように/いつパージされるかについてはよく知らないので、申し訳ありませんが答えられません。自分で試してみてください。
「別の方法」については、次のようにします。このようなものは、特定の投稿 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 つ以上のリビジョン ルール) をより簡単に調整できるようにします。