エンティティの編集

エンティティを編集するには、まずそれを取得して core-data ストアにロードする必要があります。たとえば、以下のコードは、ID 1 の投稿をストアにロードします。(エンティティは投稿であり、投稿 1 はエンティティレコードです)。

  1. wp.data.select( 'core' ).getEntityRecord( 'postType', 'post', 1 );

エンティティがロードされると、それを編集できます。たとえば、以下のコードは投稿のタイトルを「Hello World」に設定します。取得した各エンティティレコードについて、core-data ストアは次の情報を追跡します:

  • 「永続化された」レコード: バックエンドから取得されたレコードの最後の状態。
  • 「編集」のリスト: レコードの1つまたは複数のプロパティに対する未保存のローカル変更。

このパッケージは、取得したエンティティレコードを操作するための一連のアクションも公開しています。

エンティティレコードを編集するには、editEntityRecord を呼び出すことができ、これはエンティティタイプ、エンティティID、および新しいエンティティレコードをパラメータとして受け取ります。以下の例は、ID 1 の投稿のタイトルを「Hello World」に設定します。

  1. wp.data.dispatch( 'core' ).editEntityRecord( 'postType', 'post', 1, { title: 'Hello World' } );

エンティティレコードを編集したら、それを保存できます。以下のコードは、ID 1 の投稿を保存します。

  1. wp.data.dispatch( 'core' ).saveEditedEntityRecord( 'postType', 'post', 1 );

元に戻す/やり直す

WordPress エディターは複数のエンティティレコードを同時に編集できるため、core-data パッケージは、共通の元に戻す/やり直すスタック内で取得され編集されたすべてのエンティティレコードを追跡します。元に戻す/やり直すスタックの各ステップには、undo または redo アクションを呼び出すときに同時に元に戻すまたはやり直すべき「編集」のリストが含まれています。

元に戻すおよびやり直す操作を適切に実行するために、編集リスト内の各変更には次の情報が含まれています:

  • エンティティの種類と名前: core-data 内の各エンティティは、(種類, 名前) のペアで識別されます。これは、変更されたエンティティの識別子に対応します。
  • エンティティレコードID: 変更されたレコードのID。
  • プロパティ: 変更されたプロパティの名前。
  • 前: プロパティの以前の値(元に戻す操作を適用するために必要)。
  • 後: プロパティの新しい値(やり直す操作を適用するために必要)。

たとえば、ユーザーが投稿のタイトルを編集し、その後投稿スラッグを変更し、さらに投稿で使用される再利用可能なブロックのタイトルを変更したとします。次の情報が元に戻す/やり直すスタックに保存されます:

  • [ { kind: 'postType', name: 'post', id: 1, property: 'title', from: '', to: 'Hello World' } ]
  • [ { kind: 'postType', name: 'post', id: 1, property: 'slug', from: 'Previous slug', to: 'This is the slug of the hello world post' } ]
  • [ { kind: 'postType', name: 'wp_block', id: 2, property: 'title', from: 'Reusable Block', to: 'Awesome Reusable Block' } ]

ストアはまた、現在の「元に戻す/やり直す」ステップへの「ポインタ」を追跡します。デフォルトでは、ポインタは常にスタックの最後のアイテムを指します。このポインタは、ユーザーが元に戻すまたはやり直す操作を実行すると更新されます。

キャッシュされた変更

元に戻す/やり直すのコア動作は、「キャッシュされた変更」と呼ばれるものもサポートしています。これらは、すぐに元に戻す/やり直すスタックに保存されない変更です。たとえば、ユーザーがテキストフィールドに入力を開始すると、フィールドの値はストア内で変更されますが、この変更は、ユーザーが次の単語に移動するか、数ミリ秒後まで元に戻す/やり直すスタックに保存されません。これは、ユーザーが入力した各文字に対して新しい元に戻す/やり直すステップを作成しないようにするためです。

キャッシュされた変更は、変更の「キャッシュ」と呼ばれる元に戻す/やり直すスタックの外部に保持され、これらの変更は、unstableCreateUndoLevel を明示的に呼び出すか、次の変更がキャッシュされていない場合にのみ元に戻す/やり直すスタックに保存されます。

デフォルトでは、editEntityRecord へのすべての呼び出しは「キャッシュされていない」と見なされ、isCached オプションが true として渡されない限りそうなります。例:

  1. wp.data.dispatch( 'core' ).editEntityRecord( 'postType', 'post', 1, { title: 'Hello World' }, { isCached: true } );