WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_custom_logo() WP 4.5.0

Получает HTML код логотипа сайта установленного в кастомайзере (в настройках темы). Код будет такой: <a href="/"><img></a>.

Чтобы можно было установить логотип в кастомайзере, нужно включить поддержку custom-logo у темы: add_theme_support( 'custom-logo' ).

Используйте $custom_logo_id = get_theme_mod( 'custom_logo' ); чтобы получить ID вложения логотипа, и затем обработать его как-то по-другому...

Является основой для: the_custom_logo()
Работает на основе: wp_get_attachment_image(), get_theme_mod()
Возвращает

Строку. HTML код логотипа. Код будет содержать ссылку на главную страницу и в ней IMG тег самого логотипа.

Если логотип в настройках темы не установлен то вернет пустую строку.

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

get_custom_logo( $blog_id );
$blog_id(число)
ID сайта/блога, лого которого нужно получить.
По умолчанию: 0 (текущий блог)

Примеры

#1 Получим логотип сайта

Допустим, у нас включена поддержка логотипа и мы его установили, тогда:

echo get_custom_logo();

/* Выведет такой HTML код (только в одну строку):

<a href="http://wptest.ru/" class="custom-logo-link" rel="home" itemprop="url">
	<img 
	width="491" 
	height="299" 
	src="http://wptest.ru/wp-content/uploads/2013/04/cropped-cropped-triforce-wallpaper.jpg" 
	class="custom-logo" 
	alt="cropped-cropped-triforce-wallpaper.jpg" 
	itemprop="logo" 
	srcset="http://wptest.ru/wp-content/uploads/2013/04/cropped-cropped-triforce-wallpaper.jpg 491w, http://wptest.ru/wp-content/uploads/2013/04/cropped-cropped-triforce-wallpaper-300x183.jpg 300w" 
	sizes="(max-width: 491px) 100vw, 491px" 
	/>
</a>
*/

#2 Проверка установлен ли логотип для сайта

$logo = get_custom_logo();

if( $logo )
	echo 'Лого есть';

#3 Получение только ссылки (URL) логотипа

// получаем ссылку на логотип
$custom_logo__url = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' ); 
// выводим
echo $custom_logo__url[0]; 

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

С версии 4.5.0 Введена.
С версии 5.5.0 Removed the link on the home page.

Код get custom logo: wp-includes/general-template.php WP 5.5

<?php
function get_custom_logo( $blog_id = 0 ) {
	$html          = '';
	$switched_blog = false;

	if ( is_multisite() && ! empty( $blog_id ) && get_current_blog_id() !== (int) $blog_id ) {
		switch_to_blog( $blog_id );
		$switched_blog = true;
	}

	$custom_logo_id = get_theme_mod( 'custom_logo' );

	// We have a logo. Logo is go.
	if ( $custom_logo_id ) {
		$custom_logo_attr = array(
			'class' => 'custom-logo',
		);

		$unlink_homepage_logo = (bool) get_theme_support( 'custom-logo', 'unlink-homepage-logo' );

		if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
			/*
			 * If on the home page, set the logo alt attribute to an empty string,
			 * as the image is decorative and doesn't need its purpose to be described.
			 */
			$custom_logo_attr['alt'] = '';
		} else {
			/*
			 * If the logo alt attribute is empty, get the site title and explicitly pass it
			 * to the attributes used by wp_get_attachment_image().
			 */
			$image_alt = get_post_meta( $custom_logo_id, '_wp_attachment_image_alt', true );
			if ( empty( $image_alt ) ) {
				$custom_logo_attr['alt'] = get_bloginfo( 'name', 'display' );
			}
		}

		/**
		 * Filters the list of custom logo image attributes.
		 *
		 * @since 5.5.0
		 *
		 * @param array $custom_logo_attr Custom logo image attributes.
		 * @param int   $custom_logo_id   Custom logo attachment ID.
		 * @param int   $blog_id          ID of the blog to get the custom logo for.
		 */
		$custom_logo_attr = apply_filters( 'get_custom_logo_image_attributes', $custom_logo_attr, $custom_logo_id, $blog_id );

		/*
		 * If the alt attribute is not empty, there's no need to explicitly pass it
		 * because wp_get_attachment_image() already adds the alt attribute.
		 */
		$image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr );

		if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
			// If on the home page, don't link the logo to home.
			$html = sprintf(
				'<span class="custom-logo-link">%1$s</span>',
				$image
			);
		} else {
			$aria_current = is_front_page() && ! is_paged() ? ' aria-current="page"' : '';

			$html = sprintf(
				'<a href="%1$s" class="custom-logo-link" rel="home"%2$s>%3$s</a>',
				esc_url( home_url( '/' ) ),
				$aria_current,
				$image
			);
		}
	} elseif ( is_customize_preview() ) {
		// If no logo is set but we're in the Customizer, leave a placeholder (needed for the live preview).
		$html = sprintf(
			'<a href="%1$s" class="custom-logo-link" style="display:none;"><img class="custom-logo"/></a>',
			esc_url( home_url( '/' ) )
		);
	}

	if ( $switched_blog ) {
		restore_current_blog();
	}

	/**
	 * Filters the custom logo output.
	 *
	 * @since 4.5.0
	 * @since 4.6.0 Added the `$blog_id` parameter.
	 *
	 * @param string $html    Custom logo HTML output.
	 * @param int    $blog_id ID of the blog to get the custom logo for.
	 */
	return apply_filters( 'get_custom_logo', $html, $blog_id );
}

Cвязанные функции

Из метки: custom_logo (custom logo логотип)

Еще из раздела: Другие функции темы

9 комментов
  • Вопрос по строке

    return apply_filters( 'get_custom_logo', $html, $blog_id );

    Как фильтруется строка "$html"? Где в вордпрессе "add_filter( 'get_custom_logo ... )"?
    А если такого фильтра нет, что же вернёт функция "get_custom_logo()"? Не отфильтрованную переменную "$html"?

    2
    Ответить3.4 года назад #
    • campusboy3554 www.youtube.com/c/wpplus

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

      2
      Ответить3.4 года назад #
      • Ну, хорошо, а пока фильтра нет, строка "return apply_filters( 'get_custom_logo', $html ); вернёт просто неотформатированную $html? Т.е., можно написать проще: "return $html;" ?

        Ответить3.4 года назад #
        • campusboy3554 www.youtube.com/c/wpplus

          Что значит "неотформатированную"? Сказано

          Получает HTML код логотипа сайта, установленного в настройках темы. Код будет такой структуры: <a href="/"><img></a>.

          Обычный html код с ссылкой и картинкой внутри. Если нигде не применен фильтр, то html код этот оригинальный, то есть такой, какой его сделали разработчики WP.

          Ответить3.4 года назад #
        • Kama7770

          Да так и есть! yes Почему возникает таков вопрос вообще, немного не понятно. Фильтр есть фильтр - фильтрует что-то меняется, нет - не меняется... А у тебя вопрос из рубрики: "если я усну - это значит я потом буду спать?" pardon

          1
          Ответить3.4 года назад #
  • Leonid

    А как всплывающую подсказку добавить в Html-код ссылки в функции get_custom_logo() в редакторе вордпресса?

    Ответить2 года назад #
  • Может кому пригодится.
    Вывод только ссылки на логотип

    // получаем ссылку на логотип
    $custom_logo__url = wp_get_attachment_image_src( get_theme_mod( 'custom_logo' ), 'full' ); 
    // выводим
    echo $custom_logo__url[0]; 
    2
    Ответить1.5 года назад #
  • wpworld

    Как получить alt текст с картинки и вставить?

    моем случае это лого. пишу так:

    <img alt=" <?php echo get_custom_logo() ?> ">

    текст поставляет но на странице эшо выводит string url картинки:
    "class="logo-img" src="http://localhost/mytheme/wp-content/uploads/2020/05/logo.png ";

    че за ...?

    1
    Ответить2 мес назад #