WordPress 4.9.6では、欧州連合の一般データ保護規則(GDPR)などの法律に準拠するための新しいツールが追加されました。追加されたツールの中には、特定のユーザーの個人データを消去または匿名化するための個人データ削除ツールがあります。これは登録されたユーザーアカウントを削除するものではなく、それは管理者が選択できる別のステップです。

    WordPressのコメントなどに保存されている個人データに加えて、プラグインは収集した個人データを消去するために消去機能にフックすることもできます。これは、postmetaのようなものや、まったく新しいカスタム投稿タイプ(CPT)であっても同様です。

    エクスポーターと同様に、すべての消去者の「キー」はユーザーのメールアドレスです。これは、完全に登録されたユーザーと未登録のユーザー(例:ログアウトしたコメント者)の両方の個人データを消去するのをサポートするために選ばれました。

    ただし、個人データの消去を実行することは破壊的なプロセスであるため、リクエストを確認せずに実行したくありません。そのため、管理者向けのユーザーインターフェースは、すべてのリクエストを開始する際に、管理者がリクエストを行うユーザー名またはメールアドレスを入力し、その後、リクエストを確認するためのリンクをクリックするように求めます。リクエストが確認されると、管理者はユーザーの個人データ消去を開始することができ、必要に応じて強制することもできます。

    個人データのエクスポートが消去される方法は、個人データエクスポーターの方法に似ており、データを消去するための「消去者」コールバックにフックすることに依存しています。管理者が個人データ削除リンクをクリックすると、AJAXループが開始され、システムに登録されたすべての消去者を1つずつ繰り返します。コアに組み込まれた消去者に加えて、プラグインは独自の消去者コールバックを登録できます。

    消去者コールバックインターフェースは、できるだけシンプルに設計されています。消去者コールバックは、作業中のメールアドレスとページパラメータを受け取ります。ページパラメータ(1から始まる)は、プラグインが一度に収集したすべての個人データを消去しようとすることでタイムアウトを引き起こすのを避けるために使用されます。適切に動作するプラグインは、ページごとに消去しようとするデータの量を制限します(例:100件の投稿、200件のコメントなど)。

    消去者コールバックは、個人データを含むアイテムが消去されたかどうか、個人データを含むアイテムが保持されたかどうか、管理者に提示するメッセージの配列(保持されたアイテムが保持された理由を説明)および完了したかどうかを返します。消去者コールバックが完了していないと報告した場合、ページパラメータが1増加した状態で再度呼び出されます(別のリクエストで)。

    すべてのエクスポーターが完了したら、管理者ユーザーインターフェースが更新され、見つかったすべての個人データが消去されたかどうか、個人データが保持された理由を説明するメッセージが表示されます。

    仮想のプラグインを考えてみましょう。このプラグインは、コメントにコメント者の位置データを追加します。このプラグインがadd_comment_metaを使用して、meta_kelatitudelongitudeの位置データを追加したと仮定します。

    プラグインが最初に行う必要があるのは、メールアドレスとページを受け入れる消去者関数を作成することです。例えば:

    1. /**
    2. * Removes any stored location data from a user's comment meta for the supplied email address.
    3. *
    4. * @param string $email_address email address to manipulate
    5. * @param int $page pagination
    6. *
    7. * @return array
    8. */
    9. function wporg_remove_location_meta_from_comments_for_email( $email_address, $page = 1 ) {
    10. $number = 500; // Limit us to avoid timing out
    11. $page = (int) $page;
    12. $comments = get_comments(
    13. array(
    14. 'author_email' => $email_address,
    15. 'number' => $number,
    16. 'paged' => $page,
    17. 'order_by' => 'comment_ID',
    18. 'order' => 'ASC',
    19. )
    20. );
    21. $items_removed = false;
    22. foreach ( (array) $comments as $comment ) {
    23. $latitude = get_comment_meta( $comment->comment_ID, 'latitude', true );
    24. $longitude = get_comment_meta( $comment->comment_ID, 'longitude', true );
    25. if ( ! empty( $latitude ) ) {
    26. delete_comment_meta( $comment->comment_ID, 'latitude' );
    27. $items_removed = true;
    28. }
    29. if ( ! empty( $longitude ) ) {
    30. delete_comment_meta( $comment->comment_ID, 'longitude' );
    31. $items_removed = true;
    32. }
    33. }
    34. // Tell core if we have more comments to work on still
    35. $done = count( $comments ) < $number;
    36. return array(
    37. 'items_removed' => $items_removed,
    38. 'items_retained' => false, // always false in this example
    39. 'messages' => array(), // no messages in this example
    40. 'done' => $done,
    41. );
    42. }

    次に、プラグインはwp_privacy_personal_data_erasersフィルターを使用して消去者配列をフィルタリングすることでコールバックを登録する必要があります。

    登録時には、デバッグを助けるために消去者のフレンドリーネームを提供します(このフレンドリーネームは現時点では誰にも表示されません)とコールバックを提供します。例えば:

    1. /**
    2. * Registers all data erasers.
    3. *
    4. * @param array $exporters
    5. *
    6. * @return mixed
    7. */
    8. function wporg_register_privacy_erasers( $erasers ) {
    9. $erasers['my-plugin-slug'] = array(
    10. 'eraser_friendly_name' => __( 'Comment Location Plugin', 'text-domain' ),
    11. 'callback' => 'wporg_remove_location_meta_from_comments_for_email',
    12. );
    13. return $erasers;
    14. }
    15. add_filter( 'wp_privacy_personal_data_erasers', 'wporg_register_privacy_erasers' );

    これで完了です!あなたのプラグインは、個人データをクリーンアップするようになります!