Skip to content

feat: item-querytrash post status を許可し、削除済み投稿を一定期間配信できるようにする #28

@mt8

Description

@mt8

背景

mediba <mdf:deleted/> のような削除通知を出すには、trashed 投稿をフィードに含める必要がある。aggregator 側はフィードに deleted 通知が出ているのを見て自分のキャッシュを破棄する。

現状 Query\ArgsBuilder::ALLOWED_POST_STATUSpublish / private / future のみで、trash を選んでも自動的に publish に丸められる。

期待

A) trash を post status の選択肢に追加

  • ALLOWED_POST_STATUStrash を追加
  • item-query ブロックの Inspector の post status チェックボックスに trash を表示
  • feedwright/when (別 issue)と組み合わせて、author が <mdf:deleted/> 等を条件出力できるようにする

B) 「trash になってから N 日以内」フィルタ

削除通知をいつまでも残し続けると aggregator 側のフィードが膨張する。spec によっては「削除後 7 日まで配信」のような時間窓が暗黙の前提。これを設定できるようにする:

  • item-query ブロックに新属性 trashWithinDays: number(default 0 = 無制限、> 0 で日数指定)
  • ArgsBuilder::build()trashWithinDays > 0 && postStatus に trash 含む の場合に date_query を追加(post_modified ベースで「直近 N 日以内に変更されたもの」)
    • 厳密には trash になった瞬間ではなく「直近変更」だが、wp が trash 操作を post_modified で記録するため近似的にこれで足りる
    • より厳密にやる場合は _wp_trash_meta_time post meta で絞るが、後ろ向き互換性のため複雑化を避けて初版は post_modified ベースで OK

受け入れ基準

  • ArgsBuilder::ALLOWED_POST_STATUStrash が含まれる
  • postStatus: ['publish', 'trash'] を渡すと両方のステータスが結果に含まれる
  • trashWithinDays: 7 を指定すると、7 日以上前に変更された投稿は除外される
  • trashWithinDays が 0 / 未指定 / 数値以外なら無制限
  • item-query の Inspector で trash チェックボックスと「Include trashed posts modified within N days」入力欄が表示される
  • Unit: ArgsBuilder テストに trash 許可と date_query 生成のケースを追加
  • Integration: trash + within-days 設定で実際に WP_Query が想定通り絞られることを検証
  • docs/requirements.md §12.5 (feedwright/item-query) に新属性 / 新挙動を追記
  • WordPress Coding Standards (composer phpcs) パス
  • 翻訳カタログ更新

影響範囲

  • src/Query/ArgsBuilder.php:ALLOWED_POST_STATUS 追加、build() に trashWithinDays 処理
  • blocks/item-query/block.jsontrashWithinDays 属性追加
  • blocks/item-query/edit.js:post status チェックボックス + 日数入力
  • テスト:tests/Unit/ArgsBuilderTest.phptests/Integration/RenderTest.php
  • 仕様書:docs/requirements.md
  • 翻訳:languages/

関連

  • feedwright/when ブロック追加 issue と組み合わせて、削除通知の配信フローが完成する

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions