is_favicon()
Проверяет, является ли текущий запрос запросом на 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; }
Хуков нет.
Возвращает
true|false
. Запрашивается ли файл favicon.ico.
Использование
if( is_favicon() ){ // do staff }
Примеры
#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; }
#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() 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(); }