diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php
index e46f949..b601963 100644
--- a/src/wp-includes/post.php
+++ b/src/wp-includes/post.php
@@ -2029,7 +2029,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'.
@@ -2037,6 +2037,19 @@ function is_sticky( $post_id = 0 ) {
  *                              same type as $post).
  */
 function sanitize_post( $post, $context = 'display' ) {
+
+	/**
+	 * Filters the post fields.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @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'.
+	 */
+	$post = apply_filters( 'sanitize_post', $post, $context );
+
 	if ( is_object( $post ) ) {
 		// Check if post already filtered for this context.
 		if ( isset( $post->filter ) && $context == $post->filter ) {
diff --git a/tests/phpunit/tests/post.php b/tests/phpunit/tests/post.php
index c0b20bb..ff1ee07 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, 2 );
+		$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, 2 );
+	}
+
+	public function filter_sanitize_post( $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;
+	}
+
 }
