diff --git src/wp-includes/class-wp-error.php src/wp-includes/class-wp-error.php
index 3de8ae7dae..4801d67648 100644
--- src/wp-includes/class-wp-error.php
+++ src/wp-includes/class-wp-error.php
@@ -223,4 +223,48 @@ class WP_Error {
 		unset( $this->errors[ $code ] );
 		unset( $this->error_data[ $code ] );
 	}
+
+	/**
+	 * Merge the errors in another error object into this one.
+	 *
+	 * @since 5.5.0
+	 *
+	 * @param WP_Error $error Error object to merge.
+	 */
+	public function merge( WP_Error $error ) {
+		static::copy_errors( $error, $this );
+	}
+
+	/**
+	 * Export the errors in this object into another one.
+	 *
+	 * @since 5.5.0
+	 *
+	 * @param WP_Error $error Error object to export into.
+	 */
+	public function export( WP_Error $error ) {
+		static::copy_errors( $this, $error );
+	}
+
+	/**
+	 * Copy errors from one WP_Error to another.
+	 *
+	 * @since 5.5.0
+	 *
+	 * @param WP_Error $from From.
+	 * @param WP_Error $to   To.
+	 */
+	protected static function copy_errors( WP_Error $from, WP_Error $to ) {
+		foreach ( $from->get_error_codes() as $code ) {
+			foreach ( $from->get_error_messages( $code ) as $error_message ) {
+				$to->add( $code, $error_message );
+			}
+
+			$data = $from->get_error_data( $code );
+
+			if ( $data ) {
+				$to->add_data( $data, $code );
+			}
+		}
+	}
 }
diff --git tests/phpunit/tests/general/wpError.php tests/phpunit/tests/general/wpError.php
index 3fccc470c8..1b88563c9c 100644
--- tests/phpunit/tests/general/wpError.php
+++ tests/phpunit/tests/general/wpError.php
@@ -718,4 +718,57 @@ class Tests_WP_Error extends WP_UnitTestCase {
 		$this->assertEmpty( $this->wp_error->error_data );
 	}
 
+	/**
+	 * @covers ::merge()
+	 */
+	public function test_merge_should_copy_other_error_into_instance() {
+		$this->wp_error->add( 'code1', 'message1', 'data1' );
+
+		$other = new \WP_Error( 'code1', 'message2', 'data2' );
+		$other->add( 'code2', 'message3' );
+		$this->wp_error->merge( $other );
+
+		$this->assertSame( array( 'message1', 'message2' ), $this->wp_error->get_error_messages( 'code1' ) );
+		$this->assertSame( 'data2', $this->wp_error->get_error_data( 'code1' ) );
+		$this->assertSame( 'message3', $this->wp_error->get_error_message( 'code2' ) );
+	}
+
+	/**
+	 * @covers ::merge()
+	 */
+	public function test_merge_with_no_errors_should_not_add_to_instance() {
+		$other = new \WP_Error();
+
+		$this->wp_error->merge( $other );
+
+		$this->assertFalse( $this->wp_error->has_errors() );
+	}
+
+	/**
+	 * @covers ::export()
+	 */
+	public function test_export_should_copy_instance_into_other_error() {
+		$other = new \WP_Error();
+		$other->add( 'code1', 'message1', 'data1' );
+
+		$this->wp_error->add( 'code1', 'message2', 'data2' );
+		$this->wp_error->add( 'code2', 'message3' );
+
+		$this->wp_error->export( $other );
+
+		$this->assertSame( array( 'message1', 'message2' ), $other->get_error_messages( 'code1' ) );
+		$this->assertSame( 'data2', $other->get_error_data( 'code1' ) );
+		$this->assertSame( 'message3', $other->get_error_message( 'code2' ) );
+	}
+
+	/**
+	 * @covers ::export()
+	 */
+	public function test_export_with_no_errors_should_not_add_to_other_error() {
+		$other = new \WP_Error();
+
+		$this->wp_error->export( $other );
+
+		$this->assertFalse( $other->has_errors() );
+	}
 }
