Рассмотрим несколько полезных функций для сайта WordPress которые позволят изменить URI логотипа, получить или убрать ссылку на главную, вывести логотип вместо названия и описания сайта, добавить микроразметку или другие атрибуты, а также вставить свой логотип на страницу входа.

Конечно же, можно, особо не напрягаясь, вставить в тему простой HTML-код и WordPress его без проблем отобразит. Но лучше будет правильно подключить функцию.

⚠️ Так как версии WordPress и его темы и плагины могут изменяться, тестируйте любой кастомный код на промежуточном веб-сайте перед переходом в рабочую среду.

Функции, отвечающие за отображение логотипа на сайте, и установка размеров

Чтобы в классической теме WordPress включить поддержку пользовательского логотипа нужно добавить следующий код в файл functions.php. Его надо вставить внутри функции, которая используется для хука действия `after_setup_theme`:

add_theme_support( 'custom-logo' );

Давайте немного изменим код, чтобы задать размеры изображения логотипа в пикселях. Это ширина и высота, которые будут отображаться на сайте. В зависимости от дизайна сайта, можно указать фиксированный размер или сделать его адаптивным по ширине или высоте. Также добавим параметр unlink-homepage-logo, который уберет ссылку на главную страницу с логотипа. Этот параметр работает только в WP версии 5.5 и выше.

/**
*Enable support for custom logo
*/
add_theme_support( 'custom-logo', array(
	'height'      => 100,
	'width'       => 200,
	'flex-height' => true, // если гибкая высота.
	'flex-width'  => true, // если гибкая ширина.
	'unlink-homepage-logo' => true, // убрать (по умолчанию true) или оставить ссылку на главную (т.е. изменить true на false). Вставлять эту строчку только для ver. WP выше 5.5.

) );

Далее скопируйте следующий код и вставьте его в нужном месте в файле header.php, т.е. там, где будет логотип. Сохраните файл.

<?php
 if ( function_exists( 'the_custom_logo' ) ) {
    the_custom_logo();
}
?>

Теперь откройте кастомизатор тем — это визуальная настройка темы в административной панели, добавьте своё изображение логотипа, сохраните настройки, и вы увидите, что оно появилось на странице в нужном месте. В WordPress до версии 5.5 на главной странице будет выводится также ссылка на эту же страницу.

Вот пример HTML кода, который показывает, как это будет выглядеть:

<div class="site-branding">
	<a href="https://site.ru/" class="custom-logo-link" rel="home">
		<img width="819" height="818" src="https://site.ru/wp-content/uploads/2018/01/cropped-logo.png" class="custom-logo" alt="Test" srcset="https://site.ru/wp-content/uploads/2018/01/cropped-logo.png 819w, https://site.ru/wp-content/uploads/2018/01/cropped-logo.png-150x150.png 150w, https://site.ru/wp-content/uploads/2018/01/cropped-logo.png-768x767.png 768w" sizes="(max-width: 819px) 100vw, 819px">
	</a>
</div>

Включаем только логотип или только название сайта с описанием

В файле header.php вставим код, который выведет название и описание сайта если отсутствует логотип, а когда он загружен, то они будут скрыты.

<?php
    $logo_id = get_theme_mod( 'custom_logo' );
    $logo_image = wp_get_attachment_image_src( $logo_id, 'full' );
if ( ! empty( $logo_image ) ) : //если установлено изображение, то показывать только логотип
?>
<div class="site-branding">
    <span class="site-logo">
		<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
			<img src="<?php echo esc_url( $logo_image[0] ); ?>" alt="<?php bloginfo( 'name' ); ?>" title="<?php bloginfo( 'name' ); ?>"/>
		</a>
	</span>
	<span class="site-name" style="clip: rect(1px, 1px, 1px, 1px);position: absolute;margin: 0;">
		<h1 class="site-title">
			<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
				<?php bloginfo( 'name' ); ?>
			</a>
		</h1>
		<p class="site-description">
			<?php bloginfo('description'); ?>
		</p>
	</span>
</div>
<?php else :  //если логотипа нет, то показывать только название и описание сайта ?>
<div class="site-branding">
	<h1 class="site-title">
		<a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
			<?php bloginfo( 'name' ); ?>
		</a>
	</h1>
	<p class="site-description">
		<?php bloginfo('description'); ?>
	</p>
</div>
<?php endif; ?>

Заголовок и описание могут быть скрыты только при помощи CSS, чтобы оставаться доступными для поисковых служб, полностью удалять их со страницы не стоит. Логотип также предпочтительнее будет оставить в коде, но скрыть правилами CSS, если того требует дизайн.

Меняем разметку логотипа и удаляем циклическую ссылку

Как уже отмечалось, в WordPress 5.5 базовые функции get_custom_logo() и the_custom_logo() не добавляют ссылку на главную страницу к логотипу (чтобы избежать цикличности). Однако, можно управлять наличием или отсутствием этой ссылки другим способом, который совместим как с новыми, так и со старыми версиями WP.

В этой функции мы также можем задать свойства микроразметки Schema для изображений, например, itemprop=’url image’. Мы можем настроить атрибуты логотипа и ссылки по своему усмотрению. Например, мы можем отключить loading=»lazy» и decoding=»async» или добавить fetchpriority=»high», изменить class, title или alt-текст.

/**
 * Custom logo.
 */
function webkato_theme_logo() {
    $custom_logo_id = get_theme_mod( 'custom_logo' );
	// Если главная, то без ссылки
    if(is_home()){ //если у вас вместо главной страница блога, то is_home, если статичная страница, то is_front_page
    	$html = wp_get_attachment_image( $custom_logo_id, 'full', false, array(
                'class'    => 'custom_logo',
                'alt' => get_bloginfo('name'),
                'title' => get_bloginfo('name'),
				'loading' => '',
				'decoding' => '',
				'fetchpriority' => 'high'
    	) );
	} else { // На прочих страницах ссылка на главную есть
		$html = sprintf( '<a href="%1$s" class="custom-logo-link" rel="home">%2$s</a>',
            esc_url( home_url( '/' ) ),
            wp_get_attachment_image( $custom_logo_id, 'full', false, array(
                'class'    => 'custom_logo',
                'alt' => get_bloginfo('name'),
                'title' => get_bloginfo('name'),
				'loading' => '',
				'decoding' => '',
				'fetchpriority' => 'high')
        ) );
	}

    return $html;
}
add_filter( 'get_custom_logo', 'webkato_theme_logo' );

Теперь в файл header.php вставляем следующий код, чтобы вывести логотип на страницах сайта:

<?php
	if ( function_exists( 'webkato_theme_logo' ) ) {
		echo webkato_theme_logo();
	}
?>

Если для микроразметки понадобится указать <meta itemprop=»width» content=»»> или <meta itemprop=»height» content=»»>, то можно сделать так:

<?php
	if ( function_exists( 'webkato_theme_logo' ) ) {
		echo webkato_theme_logo();
		$image = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' );
		echo '<meta itemprop="width" content="'. absint( $image[1] ) .'"> 
			  <meta itemprop="height" content="'. absint( $image[2] ) .'">';
	}
?>

Ссылка на логотип

Если понадобится вывести ссылку на логотип.

<?php echo esc_url( wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' )[0] ); ?>

Или

$custom_logo_id = get_theme_mod( 'custom_logo' );
$image = wp_get_attachment_image_src( $custom_logo_id , 'full' );
echo $image[0];

Загрузить логотип из другой папки

Иногда требуется загрузить логотип не из каталога /wp-content/uploads/, а из любой другой папки. Например, подключив защиту от хотлинкинга в Cloudflare нам потребуется перенести все разрешённые изображения в папку hotlink-ok, тогда подключим изображение логотипа таким образом:

/**
 * Custom logo another path.
 */
function webkato_theme_logo() {
    $custom_logo_url = '/path/to/your/logo.png'; // Замените на путь к вашему логотипу
	$custom_logo_url_2x = '/path/to/your/logo@2x.png'; // Замените на путь к вашему логотипу высокого разрешения
	// Если главная, то без ссылки
    if(is_home()){ //если у вас вместо главной страница блога, то is_home, если статичная страница, то is_front_page
    	$html = '<img src="' . $custom_logo_url . '" srcset="' . $custom_logo_url . ' 1x, ' . $custom_logo_url_2x . ' 2x" sizes="(max-width: 600px) 100vw, 600px" class="custom_logo" alt="' . get_bloginfo('name') . '" title="' . get_bloginfo('name') . '" style="width:100%; height:auto;"/>';
	} else { // На прочих страницах ссылка на главную есть
		$logo_html = '<img src="' . $custom_logo_url . '" srcset="' . $custom_logo_url . ' 1x, ' . $custom_logo_url_2x . ' 2x" sizes="(max-width: 600px) 100vw, 600px" class="custom_logo" alt="' . get_bloginfo('name') . '" title="' . get_bloginfo('name') . '" style="width:100%; height:auto;"/>';

		$html = sprintf( '<a href="%1$s" class="custom-logo-link" rel="home">%2$s</a>', esc_url( home_url( '/' ) ), $logo_html );
	}

    return $html;
}
add_filter( 'get_custom_logo', 'webkato_theme_logo' );

Если изображение будет загружено из папки активной темы, то извлечем URI логотипа так:

$custom_logo_url = get_template_directory_uri() . '/images/logo.png';

Свой логотип на странице входа

Эта функция позволяет установить собственное изображение на страницу входа сайта.

function wpdev_filter_login_head() {
 
    if ( has_custom_logo() ) :
 
        $image = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' );
        ?>
        <style type="text/css">
            .login h1 a {
                background-image: url(<?php echo esc_url( $image[0] ); ?>);
                -webkit-background-size: <?php echo absint( $image[1] )?>px;
                background-size: <?php echo absint( $image[1] ) ?>px;
                height: <?php echo absint( $image[2] ) ?>px;
                width: <?php echo absint( $image[1] ) ?>px;
            }
        </style>
        <?php
    endif;
}
 
add_action( 'login_head', 'wpdev_filter_login_head', 100 );

Высоту и ширину можно прописать вручную, заменив содержимое в background-size, height и width на свой размер.

Теперь изменим ссылку на странице входа:

function new_wp_login_url() {
    return home_url();
}
add_filter('login_headerurl', 'new_wp_login_url');

Оставьте комментарий

Комментарии, считающиеся спамом или исключительно рекламные по своему содержанию, будут удалены. Допускается включение ссылки на соответствующий контент, но текст должен иметь отношение к теме поста. Также будут удалены анонимные, оскорбительные, содержащие ненормативную лексику, вводящие в заблуждение или клеветнические комментарии.

Для публикации кода в комментариях используйте следующие шорткоды -
[php]ваш код[/php] - для PHP, [css]ваш код[/css] - для CSS, [code lang="js"]ваш код[/code] - для HTML или JS, указав соответствующий lang.

Ваш адрес email не будет опубликован. Обязательные поля помечены *