diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php index f021aedb8a5fb..dc6f7437ace55 100644 --- a/src/wp-admin/includes/misc.php +++ b/src/wp-admin/includes/misc.php @@ -609,8 +609,11 @@ function wp_reset_vars( $vars ) { * @since 2.1.0 * * @param string|WP_Error $message The message to display, or a WP_Error object. + * @param bool $echo Optional. Whether to print the message and flush all output + * buffers. Default true. + * @return string|void The message HTML if `$echo` is false. */ -function show_message( $message ) { +function show_message( $message, $echo = true ) { if ( is_wp_error( $message ) ) { if ( $message->get_error_data() && is_string( $message->get_error_data() ) ) { $message = $message->get_error_message() . ': ' . $message->get_error_data(); @@ -619,7 +622,13 @@ function show_message( $message ) { } } - echo "

$message

\n"; + $output = "

$message

\n"; + + if ( ! $echo ) { + return $output; + } + + echo $output; wp_ob_end_flush_all(); flush(); } diff --git a/tests/phpunit/tests/admin/includes/misc/ShowMessage_Test.php b/tests/phpunit/tests/admin/includes/misc/ShowMessage_Test.php new file mode 100644 index 0000000000000..eac89e61b013d --- /dev/null +++ b/tests/phpunit/tests/admin/includes/misc/ShowMessage_Test.php @@ -0,0 +1,34 @@ +assertSame( "

A message.

\n", show_message( 'A message.', false ) ); + } + + /** + * @ticket 65181 + */ + public function test_show_message_returns_formatted_html_for_wp_error_with_string_data() { + $error = new WP_Error( 'test_error', 'A message.', 'Error details.' ); + + $this->assertSame( "

A message.: Error details.

\n", show_message( $error, false ) ); + } + + /** + * @ticket 65181 + */ + public function test_show_message_returns_formatted_html_for_wp_error_without_string_data() { + $error = new WP_Error( 'test_error', 'A message.', array( 'Error details.' ) ); + + $this->assertSame( "

A message.

\n", show_message( $error, false ) ); + } +}