diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 36146132d7..77aaf718b1 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -1899,7 +1899,8 @@ function wp_nonce_field( $action = -1, $name = '_wpnonce', $referer = true, $ech * @return string Referer field HTML markup. */ function wp_referer_field( $echo = true ) { - $referer_field = ''; + $request_url = remove_query_arg( '_wp_http_referer' ); + $referer_field = ''; if ( $echo ) { echo $referer_field; diff --git a/tests/phpunit/tests/functions/wpRefererField.php b/tests/phpunit/tests/functions/wpRefererField.php index d0642f4088..6442e7a0b9 100644 --- a/tests/phpunit/tests/functions/wpRefererField.php +++ b/tests/phpunit/tests/functions/wpRefererField.php @@ -29,4 +29,50 @@ class Tests_Functions_wpRefererField extends WP_UnitTestCase { $this->assertSame( '', wp_referer_field( false ) ); } + + /** + * Tests that the echo argument is respected. + * + * @ticket 54106 + * + * @dataProvider data_wp_referer_field_should_respect_echo_arg + * + * @param mixed $echo Whether to echo or return the referer field. + */ + public function test_wp_referer_field_should_respect_echo_arg( $echo ) { + $actual = $echo ? get_echo( 'wp_referer_field' ) : wp_referer_field( false ); + + $this->assertSame( '', $actual ); + } + + /** + * Data provider for test_wp_referer_field_should_respect_echo_arg(). + * + * @return array + */ + public function data_wp_referer_field_should_respect_echo_arg() { + return array( + 'true' => array( true ), + '(int) 1' => array( 1 ), + '(string) "1"' => array( '1' ), + 'false' => array( false ), + 'null' => array( null ), + '(int) 0' => array( 0 ), + '(string) "0"' => array( '0' ), + ); + } + + /** + * @ticket 54106 + */ + public function test_wp_referer_field_with_referer() { + $old_request_uri = $_SERVER['REQUEST_URI']; + $_SERVER['REQUEST_URI'] = 'edit.php?_wp_http_referer=edit.php'; + + $actual = wp_referer_field( false ); + + $_SERVER['REQUEST_URI'] = $old_request_uri; + + $this->assertSame( '', $actual ); + } }