函数文档

wp_comments_personal_data_exporter()

💡 云策文档标注

概述

wp_comments_personal_data_exporter() 函数用于从评论表中查找并导出与指定电子邮件地址关联的个人数据,支持分页处理以避免超时。

关键要点

  • 函数参数:$email_address(必需,评论作者电子邮件地址)和 $page(可选,评论页码,默认值为 1)。
  • 返回值:返回一个数组,包含 data(个人数据数组)和 done(指示导出是否完成)。
  • 内部实现:使用 get_comments() 查询评论,每次限制 500 条,并导出特定评论属性如作者、电子邮件、内容等。
  • 数据分组:导出的数据以 'comments' 为组 ID,包含组标签和描述,每个评论作为独立项。

代码示例

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(
                        '%s',
                        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,
    );
}

注意事项

  • 函数在 WordPress 4.9.6 版本中引入,用于个人数据导出功能。
  • 相关函数包括 get_comment_text()、get_comment_link()、get_comments()、__()、esc_url() 和 esc_html()。

📄 原文内容

Finds and exports personal data associated with an email address from the comments table.

Parameters

$email_addressstringrequired
The comment author email address.
$pageintoptional
Comment page number.

Default:1

Return

array An array of personal data.

  • data array[]
    An array of personal data arrays.
  • done bool
    Whether the exporter is finished.

Source

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">%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,
	);
}

Changelog

Version Description
4.9.6 Introduced.