diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php
index 98ad57f..dfeb89c 100644
--- a/src/wp-includes/post.php
+++ b/src/wp-includes/post.php
@@ -2098,7 +2098,7 @@ function is_sticky( $post_id = 0 ) {
  *
  * @see sanitize_post_field()
  *
- * @param object|WP_Post|array $post    The Post Object or Array
+ * @param object|WP_Post|array $post    The Post Object or Array.
  * @param string               $context Optional. How to sanitize post fields.
  *                                      Accepts 'raw', 'edit', 'db', or 'display'.
  *                                      Default 'display'.
@@ -2106,6 +2106,9 @@ function is_sticky( $post_id = 0 ) {
  *                              same type as $post).
  */
 function sanitize_post( $post, $context = 'display' ) {
+
+	$original_post = $post;
+
 	if ( is_object( $post ) ) {
 		// Check if post already filtered for this context.
 		if ( isset( $post->filter ) && $context == $post->filter ) {
@@ -2131,7 +2134,19 @@ function sanitize_post( $post, $context = 'display' ) {
 		}
 		$post['filter'] = $context;
 	}
-	return $post;
+
+	/**
+	 * Filters the sanitized post fields.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @param object|WP_Post|array $post          The sanitized Post Object or Array.
+	 * @param object|WP_Post|array $original_post The Post Object or Array.
+	 * @param string               $context       Optional. How to sanitize post fields.
+	 *                                            Accepts 'raw', 'edit', 'db', or 'display'.
+	 *                                            Default 'display'.
+	 */
+	return apply_filters( 'sanitize_post', $post, $original_post, $context );
 }
 
 /**
diff --git a/tests/phpunit/tests/post.php b/tests/phpunit/tests/post.php
index c0b20bb..4fa81a9 100644
--- a/tests/phpunit/tests/post.php
+++ b/tests/phpunit/tests/post.php
@@ -1354,4 +1354,38 @@ class Tests_Post extends WP_UnitTestCase {
 		$this->assertEquals( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );
 	}
 
+	/**
+	 * Test 'sanitize_post' filter.
+	 *
+	 * @ticket 43638
+	 */
+	public function test_sanitize_post_filter() {
+		add_filter( 'sanitize_post', array( $this, 'filter_sanitize_post' ), 10, 3 );
+		$post_id = wp_insert_post(
+			array(
+				'post_type' => 'post',
+				'post_title' => 'Stuff and Things',
+				'post_status' => 'draft'
+			)
+		);
+		$post = get_post( $post_id );
+		$this->assertEquals( $post->post_title, 'Stuff and Things - draft' );
+		remove_filter( 'sanitize_post', array( $this, 'filter_sanitize_post' ), 10, 3 );
+	}
+
+	public function filter_sanitize_post( $post, $original_post, $context ) {
+		if ( 'raw' === $context ) {
+			return $post;
+		}
+		if ( $context === 'db' ) {
+			if ( is_object( $post ) ) {
+				$post->post_title .= ' - ' . $post->post_status;
+			}
+			else {
+				$post['post_title'] .= ' - ' . $post['post_status'];
+			}
+		}
+		return $post;
+	}
+
 }
