do_action_ref_array( ‘send_headers’, WP $wp )

Fires once the requested HTTP headers for caching, content type, etc. have been sent.

Parameters

$wpWP
Current WordPress environment instance (passed by reference).

More Information

This action hook is used to add additional headers to the outgoing HTTP response.

Source

do_action_ref_array( 'send_headers', array( &$this ) );

Changelog

VersionDescription
2.1.0Introduced.

User Contributed Notes

  1. Skip to note 5 content

    Since WordPress 6.1, the send_headers action has been moved to later in core load. It is now triggered after pre_get_posts.

    Conditionals tags can now be used (is_single, is_404 and so on).

    More information on this dev-note: https://make.wordpress.org/core/2022/10/10/moving-the-send_headers-action-to-later-in-the-load/

  2. Skip to note 6 content

    As an example: HTML5 Boilerplate provides an X-UA-Compatible meta element by default. This element breaks validation but can be moved to a header. Adding the following to functions.php fixes the validation issue and provides IE users a better experience.

    add_action( 'send_headers', 'add_header_xua' );
    function add_header_xua() {
    	header( 'X-UA-Compatible: IE=edge,chrome=1' );
    }
  3. Skip to note 7 content

    Example migrated from Codex:

    As an example: HTML5 Boilerplate provides an X-UA-Compatible meta element by default. This element breaks validation, but can be moved to a header. Adding the following to functions.php fixes the validation issue and provides IE users a better experience.

    add_action( 'send_headers', 'add_header_xua' );
    function add_header_xua() {
    	header( 'X-UA-Compatible: IE=edge,chrome=1' );
    }
  4. Skip to note 8 content

    Example of how to conditionally send a header, replacing previously set header, if any…

    /**
     * Send "X-Robots-Tag: noindex, nofollow" header if not a public web site. 
     * If WP_DEBUG is true, treat web site as if it is non-public.
     */
    add_action( 'send_headers', function() {
    	if ( '0' != get_option( 'blog_public' ) || ( defined( 'WP_DEBUG' ) && true == WP_DEBUG ) ) {
    		/**
    		 * Tell robots not to index or follow
    		 * Set header replace parameter to true
    		 */
    		header( 'X-Robots-Tag: noindex, nofollow', true );
    	}
    }, 99 );  // Try to execute last with priority set to 99

You must log in before being able to contribute a note or feedback.