Make WordPress Core


Ignore:
Timestamp:
12/28/2019 09:18:03 PM (4 years ago)
Author:
SergeyBiryukov
Message:

Bootstrap/Load: Make handling the /favicon.ico requests more flexible.

Previously, wp_favicon_request() was introduced in [13205] to avoid a performance hit of serving a full 404 page on every favicon request.

While working as intended, that implementation did not provide a way for theme or plugin authors to manage the behavior of favicon requests.

This changeset implements the following logic (only applied if WordPress is installed in the root directory):

  • If there is a Site Icon set in Customizer, redirect /favicon.ico requests to that icon.
  • Otherwise, use the WordPress logo as a default icon.
  • If a physical /favicon.ico file exists, do nothing, let the server handle the request.

Handling /favicon.ico is now more consistent with handling /robots.txt requests.

New functions and hooks:

  • Introduce is_favicon() conditional tag to complement is_robots().
  • Introduce do_favicon action to complement do_robots and use it in template loader.
  • Introduce do_favicon() function, hooked to the above action by default, to complement do_robots().
  • Introduce do_faviconico action to complement do_robotstxt, for plugins to override the default behavior.
  • Mark wp_favicon_request() as deprecated in favor of do_favicon().

Props jonoaldersonwp, birgire, joostdevalk, mukesh27, SergeyBiryukov.
Fixes #47398.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/query.php

    r46660 r47018  
    624624
    625625/**
    626  * Is the query for the robots file?
     626 * Is the query for the robots.txt file?
    627627 *
    628628 * @since 2.1.0
     
    641641
    642642    return $wp_query->is_robots();
     643}
     644
     645/**
     646 * Is the query for the favicon.ico file?
     647 *
     648 * @since 5.4.0
     649 *
     650 * @global WP_Query $wp_query WordPress Query object.
     651 *
     652 * @return bool
     653 */
     654function is_favicon() {
     655    global $wp_query;
     656
     657    if ( ! isset( $wp_query ) ) {
     658        _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
     659        return false;
     660    }
     661
     662    return $wp_query->is_favicon();
    643663}
    644664
Note: See TracChangeset for help on using the changeset viewer.