Функция get_custom_logo() в WordPress: как использовать и примеры

Функция get_custom_logo() в WordPress

Функция get_custom_logo() предназначена для получения пользовательского логотипа, связанного с домашней страницей вашего сайта на WordPress.

Как это работает?

Эта функция использует другие функции WordPress, такие как wp_get_attachment_image() и get_theme_mod().

Используемые функции

  • wp_get_attachment_image(): получает изображение по его идентификатору.
  • get_theme_mod(): позволяет получить настройки вашей темы, в нашем случае — идентификатор логотипа.

Заменяемые хуки

  • get_custom_logo_image_attributes: фильтр для атрибутов изображения логотипа.
  • get_custom_logo: фильтр для HTML-кода логотипа.

Возвращаемое значение

Функция возвращает строку, содержащую HTML-код для отображения логотипа.

Применение

Чтобы использовать функцию, просто вызовите её, передав ID блога (по умолчанию используется текущий блог).

get_custom_logo( $blog_id );

Параметры

  • $blog_id (int): ID блога, для которого вы хотите получить логотип.
    • По умолчанию: ID текущего блога.

Примеры использования

Пример 1: Получение логотипа сайта

Предположим, что вы включили функцию логотипа в вашей теме и указали изображение. Тогда вызовите:

echo get_custom_logo();

Это выведет HTML-код, похожий на следующий (в одной строке):

Пример 2: Проверка наличия логотипа

Вы можете проверить, установлен ли логотип на сайте:

$logo = get_custom_logo();

if( $logo ) {
    echo 'У нас есть логотип';
}

Пример 3: Получение только URL логотипа

Если вам нужен только URL изображения логотипа, вы можете сделать так:

$custom_logo_id = get_theme_mod( 'custom_logo' );
$image = wp_get_attachment_image_src( $custom_logo_id, 'full' );

// Выводим его:
echo $image[0];

Также, есть альтернативный способ получить ссылку на логотип:

echo esc_url( wp_get_attachment_url( get_theme_mod( 'custom_logo' ) ) );

Изменения в функции

  • С версии 4.5.0: функция была введена.
  • С версии 5.5.0: добавлена опция удалить ссылку на домашнюю страницу для логотипа.
  • С версии 5.5.1: отложенная загрузка изображений отключена по умолчанию.

Код функции get_custom_logo()

Вот как выглядит реализация функции get_custom_logo():

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;
}

if ( has_custom_logo() ) {
    $custom_logo_id = get_theme_mod( 'custom_logo' );
    $custom_logo_attr = array(
        'class'   => 'custom-logo',
        'loading' => false,
    );

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

    if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
        $custom_logo_attr['alt'] = '';
    } else {
        $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' );
        }
    }

    $custom_logo_attr = apply_filters( 'get_custom_logo_image_attributes', $custom_logo_attr, $custom_logo_id, $blog_id );

    $image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr );

    if ( $image ) {
        if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
            $html = sprintf('%1$s', $image);
        } else {
            $aria_current = is_front_page() && ! is_paged() ? ' aria-current="page"' : '';
            $html = sprintf('%3$s', esc_url(home_url('/')), $aria_current, $image);
        }
    }
} elseif ( is_customize_preview() ) {
    $html = sprintf('', esc_url(home_url('/')));
}

if ( $switched_blog ) {
    restore_current_blog();
}

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

}

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

  • has_custom_logo(): проверяет, установлен ли логотип.
  • the_custom_logo(): выводит логотип на экран.

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

Leave a Reply

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