wp_site_icon()WP 4.3.0

Выводит на экран мета тег иконки сайта: <link rel="icon" href="%s" sizes="32x32" />

Выводит 4 метатега для разных устройств:

<link rel="icon" href="%s" sizes="32x32" />
<link rel="icon" href="%s" sizes="192x192" />
<link rel="apple-touch-icon-precomposed" href="%s">
<meta name="msapplication-TileImage" content="%s">

Функция используется в фильтре WP по умолчанию, с версии 4.3:

add_action( 'wp_head', 'wp_site_icon', 99 );

Перед выводом кода, функция проверяет установлена ли вообще иконка для сайта. Проверка есть иконка или нет, по сути сводиться к проверке есть опция или нет...

ID вложения иконки сайта хранится в опции 'site_icon':

// для MU
$site_icon_id = get_blog_option( $blog_id, 'site_icon' );
// обычная установка
$site_icon_id = get_option( 'site_icon' );
Работает на основе: get_site_icon_url(), has_site_icon()
Хуки из функции

Возвращает

null. Ничего. Выводит на экран HTML код.

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

wp_site_icon();

Примеры

0

#1 Демонстрация работы

Допустим мы установили иконку для сайта во: Внешний вид > Настроить > Свойства сайта, тогда следующий код сработает так:

wp_site_icon();

/* выведет:
<link rel="icon" href="http://example.com/wp-content/uploads/2015/07/cropped-gorchitca___-32x32.jpg" sizes="32x32" />
<link rel="icon" href="http://example.com/wp-content/uploads/2015/07/cropped-gorchitca___-192x192.jpg" sizes="192x192" />
<link rel="apple-touch-icon-precomposed" href="http://example.com/wp-content/uploads/2015/07/cropped-gorchitca___-180x180.jpg">
<meta name="msapplication-TileImage" content="http://example.com/wp-content/uploads/2015/07/cropped-gorchitca___-270x270.jpg">
*/
0

#2 Отключим вывод иконки сайта, если она установлена

Для этого впишем этот код в файл темы functions.php:

remove_action('wp_head', 'wp_site_icon', 99 );

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

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

Код wp_site_icon() WP 6.5.2

function wp_site_icon() {
	if ( ! has_site_icon() && ! is_customize_preview() ) {
		return;
	}

	$meta_tags = array();
	$icon_32   = get_site_icon_url( 32 );
	if ( empty( $icon_32 ) && is_customize_preview() ) {
		$icon_32 = '/favicon.ico'; // Serve default favicon URL in customizer so element can be updated for preview.
	}
	if ( $icon_32 ) {
		$meta_tags[] = sprintf( '<link rel="icon" href="%s" sizes="32x32" />', esc_url( $icon_32 ) );
	}
	$icon_192 = get_site_icon_url( 192 );
	if ( $icon_192 ) {
		$meta_tags[] = sprintf( '<link rel="icon" href="%s" sizes="192x192" />', esc_url( $icon_192 ) );
	}
	$icon_180 = get_site_icon_url( 180 );
	if ( $icon_180 ) {
		$meta_tags[] = sprintf( '<link rel="apple-touch-icon" href="%s" />', esc_url( $icon_180 ) );
	}
	$icon_270 = get_site_icon_url( 270 );
	if ( $icon_270 ) {
		$meta_tags[] = sprintf( '<meta name="msapplication-TileImage" content="%s" />', esc_url( $icon_270 ) );
	}

	/**
	 * Filters the site icon meta tags, so plugins can add their own.
	 *
	 * @since 4.3.0
	 *
	 * @param string[] $meta_tags Array of Site Icon meta tags.
	 */
	$meta_tags = apply_filters( 'site_icon_meta_tags', $meta_tags );
	$meta_tags = array_filter( $meta_tags );

	foreach ( $meta_tags as $meta_tag ) {
		echo "$meta_tag\n";
	}
}