Index: src/wp-includes/default-filters.php
===================================================================
--- src/wp-includes/default-filters.php	(revision 43006)
+++ src/wp-includes/default-filters.php	(working copy)
@@ -329,6 +329,7 @@
 add_action( 'do_robots', 'do_robots' );
 add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3 );
 add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_comment_personal_data_exporter', 10 );
+add_filter( 'wp_privacy_personal_data_exporters', 'wp_register_post_personal_data_exporter', 10 );
 add_filter( 'wp_privacy_personal_data_erasers', 'wp_register_comment_personal_data_eraser', 10 );
 add_action( 'sanitize_comment_cookies', 'sanitize_comment_cookies' );
 add_action( 'admin_print_scripts', 'print_emoji_detection_script' );
Index: src/wp-includes/post.php
===================================================================
--- src/wp-includes/post.php	(revision 43006)
+++ src/wp-includes/post.php	(working copy)
@@ -6691,3 +6691,95 @@
 
 	return $clauses;
 }
+
+/**
+ * Registers the personal data exporter for posts.
+ *
+ * @param array   $exporters   An array of personal data exporters.
+ * @return array  An array of personal data exporters.
+ */
+function wp_register_post_personal_data_exporter( $exporters ) {
+	$exporters[] = array(
+		'exporter_friendly_name' => __( 'WordPress Posts' ),
+		'callback'               => 'wp_posts_personal_data_exporter',
+	);
+
+	return $exporters;
+}
+
+/**
+ * Finds and exports personal data associated with an email address from the posts table.
+ *
+ * @param string  $email_address The post author email address.
+ * @param int     $page          Post page.
+ * @return array  An array of personal data.
+ */
+function wp_posts_personal_data_exporter( $email_address, $page = 1 ) {
+	$email_address = trim( $email_address );
+
+	$number = 500;
+	$page = (int) $page;
+
+	$data_to_export = array();
+
+	$user = get_user_by( 'email' , $email_address );
+
+	$post_stati = array_diff(
+		get_post_stati(),
+		array(
+			'inherit',
+			'auto-save',
+		)
+	);
+	$registered_post_types = get_post_types( '', 'objects' );
+
+	$post_query = new WP_Query(
+		array(
+			'author'         => $user->ID,
+			'posts_per_page' => $number,
+			'paged'          => $page,
+			'post_type'      => array(
+				'post',
+				'page',
+			),
+			'post_status'    => $post_stati,
+			'orderby'        => 'ID',
+			'order'          => 'ASC',
+		)
+	);
+
+	$user_prop_to_export = array(
+		'ID'         => __( 'Post ID' ),
+		'post_title' => __( 'Post Title' ),
+		'guid'       => __( 'Post URL' ),
+	);
+
+	foreach ( (array) $post_query->posts as $post ) {
+		$post_data_to_export = array();
+
+		foreach ( $user_prop_to_export as $key => $name ) {
+			$value = $post->$key;
+
+			if ( ! empty( $value ) ) {
+				$post_data_to_export[] = array(
+					'name'  => $name,
+					'value' => $value,
+				);
+			}
+		}
+
+		$data_to_export[] = array(
+			'group_id'    => 'posts',
+			'group_label' => __( 'Posts / Pages' ),
+			'item_id'     => "post-{$post->ID}",
+			'data'        => $post_data_to_export,
+		);
+	}
+
+	$done = $post_query->max_num_pages < $page;
+
+	return array(
+		'data' => $data_to_export,
+		'done' => $done,
+	);
+}
