WordPress Version: 6.4
/**
* Finds and exports personal data associated with an email address from the comments table.
*
* @since 4.9.6
*
* @param string $email_address The comment author email address.
* @param int $page Comment page number.
* @return array {
* An array of personal data.
*
* @type array[] $data An array of personal data arrays.
* @type bool $done Whether the exporter is finished.
* }
*/
function wp_comments_personal_data_exporter($email_address, $page = 1)
{
// Limit us to 500 comments at a time to avoid timing out.
$number = 500;
$page = (int) $page;
$data_to_export = array();
$comments = get_comments(array('author_email' => $email_address, 'number' => $number, 'paged' => $page, 'orderby' => 'comment_ID', 'order' => 'ASC', 'update_comment_meta_cache' => false));
$comment_prop_to_export = array('comment_author' => __('Comment Author'), 'comment_author_email' => __('Comment Author Email'), 'comment_author_url' => __('Comment Author URL'), 'comment_author_IP' => __('Comment Author IP'), 'comment_agent' => __('Comment Author User Agent'), 'comment_date' => __('Comment Date'), 'comment_content' => __('Comment Content'), 'comment_link' => __('Comment URL'));
foreach ((array) $comments as $comment) {
$comment_data_to_export = array();
foreach ($comment_prop_to_export as $key => $name) {
$value = '';
switch ($key) {
case 'comment_author':
case 'comment_author_email':
case 'comment_author_url':
case 'comment_author_IP':
case 'comment_agent':
case 'comment_date':
$value = $comment->{$key};
break;
case 'comment_content':
$value = get_comment_text($comment->comment_ID);
break;
case 'comment_link':
$value = get_comment_link($comment->comment_ID);
$value = sprintf('<a href="%s" target="_blank" rel="noopener">%s</a>', esc_url($value), esc_html($value));
break;
}
if (!empty($value)) {
$comment_data_to_export[] = array('name' => $name, 'value' => $value);
}
}
$data_to_export[] = array('group_id' => 'comments', 'group_label' => __('Comments'), 'group_description' => __('User’s comment data.'), 'item_id' => "comment-{$comment->comment_ID}", 'data' => $comment_data_to_export);
}
$done = count($comments) < $number;
return array('data' => $data_to_export, 'done' => $done);
}