From 3977b6b06d1efd3f6cadb8b31bc8ba55e09486d5 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Tue, 18 Oct 2022 16:09:50 +0000 Subject: [PATCH] Bootstrap/Load: Correct sending the `X-Pingback` header in `WP::send_headers()`. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The logic for sending the `X-Pingback` header for single posts that allow pings was recently moved from `WP::handle_404()`​ to a more appropriate place in `WP::send_headers()`. To check whether pings are open for a particular post, that logic relies on the `$wp_query` global, which is declared in `WP::handle_404()`, but not in `WP::send_headers()` This commit ensures that `$wp_query` is globalized in `WP::send_headers()` too, so that the check works as expected. Follow-up to [54250]. Props strategio, sabernhardt, dlh, davidbaumwald, SergeyBiryukov. Fixes #56840. git-svn-id: https://develop.svn.wordpress.org/trunk@54636 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/class-wp.php | 4 ++++ tests/phpunit/tests/wp/sendHeaders.php | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/wp-includes/class-wp.php b/src/wp-includes/class-wp.php index 0a0a501ee0..67985c147b 100644 --- a/src/wp-includes/class-wp.php +++ b/src/wp-includes/class-wp.php @@ -410,8 +410,12 @@ class WP { * @since 2.0.0 * @since 4.4.0 `X-Pingback` header is added conditionally for single posts that allow pings. * @since 6.1.0 Runs after posts have been queried. + * + * @global WP_Query $wp_query WordPress Query object. */ public function send_headers() { + global $wp_query; + $headers = array(); $status = null; $exit_required = false; diff --git a/tests/phpunit/tests/wp/sendHeaders.php b/tests/phpunit/tests/wp/sendHeaders.php index cc956409ef..84feb74d1d 100644 --- a/tests/phpunit/tests/wp/sendHeaders.php +++ b/tests/phpunit/tests/wp/sendHeaders.php @@ -19,4 +19,19 @@ class Tests_WP_SendHeaders extends WP_UnitTestCase { $this->go_to( home_url() ); } + + /** + * @ticket 56840 + */ + public function test_send_headers_sets_x_pingback_for_single_posts_that_allow_pings() { + add_action( + 'wp_headers', + function ( $headers ) { + $this->assertArrayHasKey( 'X-Pingback', $headers ); + } + ); + + $post_id = self::factory()->post->create(); + $this->go_to( get_permalink( $post_id ) ); + } }