is_favicon()WP 5.4.0

Проверяет, является ли текущий запрос запросом на favicon.ico файл.

Эта функция по умолчанию вызывается при подключении страницы шаблона сайта в файле wp-includes/template-loader.php

Самый ранний момент, когда эту фнуцию можно вызывать - это хуки: parse_query, wp, template_redirect или позже.

Смотрмте также хук do_favicon.

Функция сработает, когда запрашивается URL /favicon.ico

Обычно это происходит автоматически при загрузке сайта, чтобы отобразить иконку вкладки:

  • Обычный визит пользователя на сайт — браузер сам делает запрос к /favicon.ico.
  • Бот (например, поисковик) индексирует сайт и запрашивает иконку.
  • Прямая ссылка типа https://example.com/favicon.ico.

Функция может не сработать, если:

  • Favicon запрашивается по другому пути (например, задан в метатеге <link rel="icon" href="https://example.com/custom-icon.ico">).
  • Запрос проходит мимо WordPress — например, если сервер (Nginx/Apache) отдает favicon.ico напрямую, минуя index.php.
  • Используется кэш на уровне сервера (Nginx, Varnish, ...), и favicon отдается без участия WP.
  • WP установлен в подкаталоге, а favicon запрашивается по корню (/favicon.ico), где нет ВП.
  • Используется отдельный домен или CDN для статики, и иконка грузится оттуда.

  • Инициализации WP перехватывается например, через auto_prepend_file — это директива PHP, которая позволяет подключить файл до выполнения любого другого PHP-кода.

    Пример в php.ini или .htaccess:

    php_value auto_prepend_file /path/to/file.php

    Если в этом файле стоит следующее условие, то WP вообще не загрузится при запросе к /favicon.ico:

    if ( $_SERVER['REQUEST_URI'] === '/favicon.ico' ) {
    	readfile( '/path/to/favicon.ico' );
    	exit;
    }
Работает на основе: WP_Query::is_favicon()

Хуков нет.

Возвращает

true|false. Запрашивается ли файл favicon.ico.

Использование

if( is_favicon() ){
	// do staff
}

Примеры

0

#1 Генерируем иконку налету

Этот код отдаст свой favicon.ico и завершит выполнение, когда браузер запросит /favicon.ico.

Иконка генерируется налету с помощью GD и выводится как favicon (16x16, чёрно-белый узор):

add_action( 'do_favicon', 'get_simple_favicon' );

function get_simple_favicon() {

	header( 'Content-Type: image/x-icon' );

	$size = 16;
	$img  = imagecreatetruecolor( $size, $size );

	$white = imagecolorallocate( $img, 255, 255, 255 );
	$black = imagecolorallocate( $img, 0, 0, 0 );

	// Рисуем простой шахматный узор
	for ( $y = 0; $y < $size; $y++ ) {
		for ( $x = 0; $x < $size; $x++ ) {
			$color = ( ( $x + $y ) % 2 === 0 ) ? $black : $white;
			imagesetpixel( $img, $x, $y, $color );
		}
	}

	// Сохраняем картику .ico в переменную
	ob_start();
	imagepng( $img );
	imagedestroy( $img );
	$png_data = ob_get_clean();

	// Выводим на экран (преобразуем PNG в ICO через header)
	echo $png_data;

	exit;
}
0

#2 Примеры исползования функции is_favicon()

Несмотря на то что эта функция используется в WP автоматически в файле wp-includes/template-loader.php, иногда она может все же пригодится.

Например, мы хотим логировать все favicon-запросы отдельно:

if ( is_favicon() ) {
	error_log( 'Favicon requested: ' . $_SERVER['REMOTE_ADDR'] );
}

Заметки

  • Global. WP_Query. $wp_query WordPress Query object.

Список изменений

С версии 5.4.0 Введена.

Код is_favicon() WP 6.8.2

function is_favicon() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_favicon();
}