WordPress Privacy Hooks

This document covers all actions and filters related to WordPress’s privacy and GDPR compliance system.

Actions

user_request_action_confirmed

Fires when a user confirms a privacy request via email link.

File: wp-includes/default-filters.php
Since: 4.9.6

do_action( 'user_request_action_confirmed', int $request_id )

Parameters

Parameter Type Description
$request_id int The ID of the confirmed request

Default Callbacks

Callback Priority Description
_wp_privacy_account_request_confirmed 10 Updates request status
_wp_privacy_send_request_confirmation_notification 12 Sends admin notification

wp_privacy_delete_old_export_files

Scheduled cron action to delete expired export files.

File: wp-includes/default-filters.php
Since: 4.9.6

do_action( 'wp_privacy_delete_old_export_files' )

Default Callbacks

Callback Priority Description
wp_privacy_delete_old_export_files 10 Deletes files older than 3 days

Filters

Exporter/Eraser Registration

wp_privacy_personal_data_exporters

Filters the array of personal data exporters.

Since: 4.9.6

apply_filters( 'wp_privacy_personal_data_exporters', array $exporters )

Parameters

Parameter Type Description
$exporters array Array of registered exporters

Exporter Structure

$exporters['exporter-id'] = array(
    'exporter_friendly_name' => 'Friendly Name',
    'callback'               => 'callback_function_name',
);

Default Exporters

ID Registered By
wordpress-user wp_register_user_personal_data_exporter()
wordpress-comments wp_register_comment_personal_data_exporter()
wordpress-media wp_register_media_personal_data_exporter()

wp_privacy_personal_data_erasers

Filters the array of personal data erasers.

Since: 4.9.6

apply_filters( 'wp_privacy_personal_data_erasers', array $erasers )

Parameters

Parameter Type Description
$erasers array Array of registered erasers

Eraser Structure

$erasers['eraser-id'] = array(
    'eraser_friendly_name' => 'Friendly Name',
    'callback'             => 'callback_function_name',
);

Default Erasers

ID Registered By
wordpress-comments wp_register_comment_personal_data_eraser()

User Profile Export

wp_privacy_additional_user_profile_data

Filters additional user profile data for privacy export.

File: wp-includes/user.php
Since: 5.4.0

apply_filters( 
    'wp_privacy_additional_user_profile_data', 
    array $additional_data, 
    WP_User $user, 
    string[] $reserved_names 
)

Parameters

Parameter Type Description
$additional_data array Additional name-value pairs to export
$user WP_User The user being exported
$reserved_names string[] Field names already exported (cannot be duplicated)

Example

add_filter( 'wp_privacy_additional_user_profile_data', function( $data, $user, $reserved ) {
    $data[] = array(
        'name'  => 'Custom Field',
        'value' => get_user_meta( $user->ID, 'custom_field', true ),
    );
    return $data;
}, 10, 3 );

Comment Anonymization

wp_anonymize_comment

Filters whether to anonymize a specific comment.

File: wp-includes/comment.php
Since: 4.9.6

apply_filters( 
    'wp_anonymize_comment', 
    bool|string $anon_message, 
    WP_Comment $comment, 
    array $anonymized_comment 
)

Parameters

Parameter Type Description
$anon_message bool|string true to anonymize, or message explaining why not
$comment WP_Comment The comment object
$anonymized_comment array The anonymized data that will be used

Example

// Prevent anonymizing comments on specific posts
add_filter( 'wp_anonymize_comment', function( $anon, $comment, $anon_data ) {
    if ( $comment->comment_post_ID === 123 ) {
        return 'Comments on this post cannot be anonymized.';
    }
    return $anon;
}, 10, 3 );

Email Filters – Request Confirmation

user_request_action_email_subject

Filters the subject of the confirmation request email sent to users.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_request_action_email_subject', 
    string $subject, 
    string $sitename, 
    array $email_data 
)

user_request_action_email_content

Filters the body of the confirmation request email.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_request_action_email_content', 
    string $content, 
    array $email_data 
)

Placeholders

Placeholder Replacement
###DESCRIPTION### Action description
###CONFIRM_URL### Confirmation link
###SITENAME### Site name
###SITEURL### Site URL

user_request_action_email_headers

Filters the headers of the confirmation request email.

File: wp-includes/user.php
Since: 5.4.0

apply_filters( 
    'user_request_action_email_headers', 
    string|array $headers, 
    string $subject, 
    string $content, 
    int $request_id, 
    array $email_data 
)

Email Filters – Admin Notification

user_request_confirmed_email_to

Filters the admin email recipient for confirmed requests.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_request_confirmed_email_to', 
    string $admin_email, 
    WP_User_Request $request 
)

Notes

  • In multisite, defaults to network admin email
  • Use to delegate to a dedicated privacy officer

user_request_confirmed_email_subject

Filters the subject of the admin notification email.

File: wp-includes/user.php
Since: 4.9.8

apply_filters( 
    'user_request_confirmed_email_subject', 
    string $subject, 
    string $sitename, 
    array $email_data 
)

user_request_confirmed_email_content

Filters the body of the admin notification email.

File: wp-includes/user.php
Since: 5.8.0

apply_filters( 
    'user_request_confirmed_email_content', 
    string $content, 
    array $email_data 
)

Placeholders

Placeholder Replacement
###SITENAME### Site name
###USER_EMAIL### User’s email address
###DESCRIPTION### Action description
###MANAGE_URL### Admin management URL
###SITEURL### Site URL

user_request_confirmed_email_headers

Filters the headers of the admin notification email.

File: wp-includes/user.php
Since: 5.4.0

apply_filters( 
    'user_request_confirmed_email_headers', 
    string|array $headers, 
    string $subject, 
    string $content, 
    int $request_id, 
    array $email_data 
)

Email Filters – Erasure Fulfillment

user_erasure_fulfillment_email_to

Filters the recipient of the erasure completion notification.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_erasure_fulfillment_email_to', 
    string $user_email, 
    WP_User_Request $request 
)

user_erasure_fulfillment_email_subject

Filters the subject of the erasure completion email.

File: wp-includes/user.php
Since: 5.8.0

apply_filters( 
    'user_erasure_fulfillment_email_subject', 
    string $subject, 
    string $sitename, 
    array $email_data 
)

user_erasure_fulfillment_email_content

Filters the body of the erasure completion email.

File: wp-includes/user.php
Since: 5.8.0

apply_filters( 
    'user_erasure_fulfillment_email_content', 
    string $content, 
    array $email_data 
)

Placeholders

Placeholder Replacement
###SITENAME### Site name
###PRIVACY_POLICY_URL### Privacy policy URL
###SITEURL### Site URL

user_erasure_fulfillment_email_headers

Filters the headers of the erasure completion email.

File: wp-includes/user.php
Since: 5.8.0

apply_filters( 
    'user_erasure_fulfillment_email_headers', 
    string|array $headers, 
    string $subject, 
    string $content, 
    int $request_id, 
    array $email_data 
)

Confirmation Message

user_request_action_confirmed_message

Filters the message shown after a user confirms their request.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_request_action_confirmed_message', 
    string $message, 
    int $request_id 
)

Request Description

user_request_action_description

Filters the human-readable action description.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 
    'user_request_action_description', 
    string $description, 
    string $action_name 
)

Key Expiration

user_request_key_expiration

Filters the expiration time for confirmation keys.

File: wp-includes/user.php
Since: 4.9.6

apply_filters( 'user_request_key_expiration', int $expiration )

Parameters

Parameter Type Default Description
$expiration int DAY_IN_SECONDS Expiration time in seconds

Example

// Extend confirmation key validity to 3 days
add_filter( 'user_request_key_expiration', function() {
    return 3 * DAY_IN_SECONDS;
} );

Export File Expiration

wp_privacy_export_expiration

Filters the lifetime of personal data export files.

File: wp-includes/functions.php
Since: 4.9.6

apply_filters( 'wp_privacy_export_expiration', int $expiration )

Parameters

Parameter Type Default Description
$expiration int 3 * DAY_IN_SECONDS File lifetime in seconds

Export Directories

wp_privacy_exports_dir

Filters the directory for storing exports.

File: wp-includes/functions.php
Since: 4.9.6

apply_filters( 'wp_privacy_exports_dir', string $exports_dir )

wp_privacy_exports_url

Filters the URL for the exports directory.

File: wp-includes/functions.php
Since: 4.9.6

apply_filters( 'wp_privacy_exports_url', string $exports_url )

Privacy Policy

privacy_policy_url

Filters the privacy policy page URL.

File: wp-includes/link-template.php
Since: 4.9.6

apply_filters( 'privacy_policy_url', string $url, int $policy_page_id )

the_privacy_policy_link

Filters the privacy policy link HTML.

File: wp-includes/link-template.php
Since: 4.9.6

apply_filters( 'the_privacy_policy_link', string $link, string $privacy_policy_url )

Anonymization

wp_privacy_anonymize_data

Filters anonymized data values.

File: wp-includes/functions.php
Since: 4.9.6

apply_filters( 'wp_privacy_anonymize_data', string $anonymous, string $type, string $data )

Parameters

Parameter Type Description
$anonymous string The anonymized value
$type string Type of data (email, url, ip, date, text, longtext)
$data string Original data

Deprecated Filters

user_confirmed_action_email_content

Deprecated: 5.8.0
Replacement: user_request_confirmed_email_content or user_erasure_fulfillment_email_content


user_erasure_complete_email_subject

Deprecated: 5.8.0
Replacement: user_erasure_fulfillment_email_subject


user_erasure_complete_email_headers

Deprecated: 5.8.0
Replacement: user_erasure_fulfillment_email_headers


Email Data Arrays

Most email filters receive an $email_data array. Here are the common structures:

Request Confirmation Email

$email_data = array(
    'request'     => WP_User_Request,
    'email'       => '[email protected]',
    'description' => 'Export Personal Data',
    'confirm_url' => 'https://example.com/wp-login.php?action=confirmaction&...',
    'sitename'    => 'Example Site',
    'siteurl'     => 'https://example.com',
);

Admin Notification Email

$email_data = array(
    'request'     => WP_User_Request,
    'user_email'  => '[email protected]',
    'description' => 'Export Personal Data',
    'manage_url'  => 'https://example.com/wp-admin/export-personal-data.php',
    'sitename'    => 'Example Site',
    'siteurl'     => 'https://example.com',
    'admin_email' => '[email protected]',
);

Erasure Fulfillment Email

$email_data = array(
    'request'            => WP_User_Request,
    'message_recipient'  => '[email protected]',
    'privacy_policy_url' => 'https://example.com/privacy-policy/',
    'sitename'           => 'Example Site',
    'siteurl'            => 'https://example.com',
);