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',
);