mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
Bootstrap/Load: Send HTTP headers after querying posts in WP::main().
By running `WP::send_headers()` after posts have been queried, we can ensure that conditional tags like `is_front_page()`, `is_home()`, etc. work as expected. This provides better context and more flexibility when adjusting HTTP headers via the `wp_headers` filter or `send_headers` action. Previously, the earliest action where conditional tags worked correctly was `wp`. Includes moving the `X-Pingback` header, previously sent in `WP::handle_404()` after posts have been queried, to a more appropriate place in `WP::send_headers()`. Follow-up to [2627], [34442]. Props jonoaldersonwp, joostdevalk, peterwilsoncc, adamsilverstein, SergeyBiryukov. Fixes #56068. git-svn-id: https://develop.svn.wordpress.org/trunk@54250 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
61f7e75895
commit
ca0979baa5
@ -408,7 +408,8 @@ class WP {
|
||||
* If showing a feed, it will also send Last-Modified, ETag, and 304 status if needed.
|
||||
*
|
||||
* @since 2.0.0
|
||||
* @since 4.4.0 `X-Pingback` header is added conditionally after posts have been queried in handle_404().
|
||||
* @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.
|
||||
*/
|
||||
public function send_headers() {
|
||||
$headers = array();
|
||||
@ -504,6 +505,15 @@ class WP {
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_singular() ) {
|
||||
$post = isset( $wp_query->post ) ? $wp_query->post : null;
|
||||
|
||||
// Only set X-Pingback for single posts that allow pings.
|
||||
if ( $post && pings_open( $post ) ) {
|
||||
$headers['X-Pingback'] = get_bloginfo( 'pingback_url', 'display' );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the HTTP headers before they're sent to the browser.
|
||||
*
|
||||
@ -701,14 +711,9 @@ class WP {
|
||||
|
||||
if ( is_singular() ) {
|
||||
$post = isset( $wp_query->post ) ? $wp_query->post : null;
|
||||
|
||||
// Only set X-Pingback for single posts that allow pings.
|
||||
if ( $post && pings_open( $post ) && ! headers_sent() ) {
|
||||
header( 'X-Pingback: ' . get_bloginfo( 'pingback_url', 'display' ) );
|
||||
}
|
||||
$next = '<!--nextpage-->';
|
||||
|
||||
// Check for paged content that exceeds the max number of pages.
|
||||
$next = '<!--nextpage-->';
|
||||
if ( $post && ! empty( $this->query_vars['page'] ) ) {
|
||||
// Check if content is actually intended to be paged.
|
||||
if ( false !== strpos( $post->post_content, $next ) ) {
|
||||
@ -770,14 +775,14 @@ class WP {
|
||||
|
||||
$parsed = $this->parse_request( $query_args );
|
||||
|
||||
$this->send_headers();
|
||||
|
||||
if ( $parsed ) {
|
||||
$this->query_posts();
|
||||
$this->handle_404();
|
||||
$this->register_globals();
|
||||
}
|
||||
|
||||
$this->send_headers();
|
||||
|
||||
/**
|
||||
* Fires once the WordPress environment has been set up.
|
||||
*
|
||||
|
||||
22
tests/phpunit/tests/wp/sendHeaders.php
Normal file
22
tests/phpunit/tests/wp/sendHeaders.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @group wp
|
||||
* @covers WP::send_headers
|
||||
*/
|
||||
class Tests_WP_SendHeaders extends WP_UnitTestCase {
|
||||
|
||||
/**
|
||||
* @ticket 56068
|
||||
*/
|
||||
public function test_send_headers_runs_after_posts_have_been_queried() {
|
||||
add_action(
|
||||
'send_headers',
|
||||
function ( $wp ) {
|
||||
$this->assertQueryTrue( 'is_front_page', 'is_home' );
|
||||
}
|
||||
);
|
||||
|
||||
$this->go_to( home_url() );
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user