Настройки: Показать/Скрыть логотип и название сайта

Вопрос или проблема

Я настроил элементы управления с помощью флажков в своем кастомизаторе тем, чтобы показывать/скрывать логотип и заголовок сайта, когда они отмечены/не отмечены. По умолчанию я хочу, чтобы логотип отображался, а заголовок сайта был скрыт.

Все работает как должно, кроме того, что заголовок сайта не отображается в живом предварительном просмотре, когда флажок отмечен, если предварительно не сохранены настройки в кастомизаторе. Однако логотип отображается по умолчанию и исчезает, когда флажок не отмечен. Это заставляет меня думать, что есть проблема с javascript и/или условием if для заголовка сайта.

Вот код, который у меня есть в файле шаблона:

<?php if( get_theme_mod( 'display_logo' , '1' ) == '1') { ?>
    <?php if ( function_exists( 'the_custom_logo' ) && has_custom_logo() ) : ?>
        <?php the_custom_logo(); ?>
    <?php else : ?> 
        <h1 class="site-logo"><a href="https://wordpress.stackexchange.com/questions/247411/<?php echo esc_url( home_url("https://wordpress.stackexchange.com/" ) ); ?>" rel="home" title="<?php bloginfo( 'name' ); ?> - <?php bloginfo( 'description' ); ?>"><img src="<?php echo get_stylesheet_directory_uri(); ?>/images/logo.png" alt="<?php bloginfo( 'name' ); ?> - <?php bloginfo( 'description' ); ?>" width="100" height="50" /></a></h1>
    <?php endif; ?>
<?php } ?>  

<?php if( get_theme_mod( 'display_site_title' , '0' ) == '1') { ?>
    <?php if ( is_front_page() && is_home() ) : ?>
        <h1 class="site-title"><a href="https://wordpress.stackexchange.com/questions/247411/<?php echo esc_url( home_url("https://wordpress.stackexchange.com/" ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
    <?php else : ?>
        <p class="site-title"><a href="https://wordpress.stackexchange.com/questions/247411/<?php echo esc_url( home_url("https://wordpress.stackexchange.com/" ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></p>
    <?php endif; ?>
<?php } ?>  

Вот код, который у меня есть в файле customizer.php:

// Отобразить логотип    
$wp_customize->add_setting( 'display_logo', array(
    'default'           => true,
    'transport'         => 'postMessage'
) );
$wp_customize->add_control( 'display_logo', array(
    'label'             => __( 'Отобразить логотип', 'myTheme' ),
    'type'              => 'checkbox'
) );

// Отобразить заголовок сайта
$wp_customize->add_setting( 'display_site_title', array(
    'default'           => false,
    'transport'         => 'postMessage'
) );
$wp_customize->add_control( 'display_site_title', array(
    'label'             => __( 'Отобразить заголовок сайта', 'myTheme' ),
    'type'              => 'checkbox'
) );

Вот код, который у меня есть в соответствующем файле customizer.js:

// Отобразить логотип     
wp.customize( 'display_logo', function( value ) {
    value.bind( function( to ) {
        if ( true === to ) {
            $( '.site-logo' ).removeClass( 'hidden' );
        } else {
            $( '.site-logo' ).addClass( 'hidden' );
        }
    });
});

// Отобразить заголовок сайта           
wp.customize( 'display_site_title', function( value ) {
    value.bind( function( to ) {
        if ( true === to ) {
            $( '.site-title' ).removeClass( 'hidden' );
        } else {
            $( '.site-title' ).addClass( 'hidden' );
        }
    });
});

Попробуйте эту функцию. Зачем обращаться к js, когда вы можете сделать это с помощью php в вашем же файле customizer.php.

/*
** показать заголовок сайта или скрыть его
*/

function showtitle_slogan() {
$showttlslogan = get_theme_mod('display_site_title');
    if ($showttlslogan == true) {
        ?>  
        <style type="text/css">
        .site-title { display:none;}
        </style>
    <?php
    }
}
add_action('wp_head', 'showtitle_slogan');

И сделайте то же самое для всего остального.

Удалите заголовок сайта и описание сайта, если установлен пользовательский логотип – WordPress

Используйте the_custom_logo(), когда хотите напечатать/вывести результаты. Используйте get_custom_logo(), когда хотите вернуть результаты (например, когда хотите присвоить их переменной или использовать в условии).

<?php
    if( get_custom_logo() ) {
        the_custom_logo();
    } elseif ( is_front_page() && is_home() ) {
        ?>
        <h1 class="site-title">
            <a href="https://wordpress.stackexchange.com/questions/247411/<?php echo esc_url( home_url("https://wordpress.stackexchange.com/" ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a>
        </h1>
        <?php
        $description = get_bloginfo( 'description', 'display' );
    } else {
        ?>
        <p class="site-title"><a href="https://wordpress.stackexchange.com/questions/247411/<?php echo esc_url( home_url("https://wordpress.stackexchange.com/" ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></p>
        <?php
        $description = get_bloginfo( 'description', 'display' );
    }

    if ( ( isset($description) && $description) || is_customize_preview() ) {
        ?>
        <p class="site-description"><?php echo $description; /* WPCS: xss ok. */ ?></p>
        <?php
    }
?>

Ответ или решение

Для настройки отображения и скрытия логотипа и заголовка сайта с помощью пользовательского интерфейса WordPress Customizer потребуется внесение изменений как в шаблон вашего сайта, так и в JavaScript. Ваша цель — обеспечить корректное взаимодействие между установленными значениями в настройках и их отображением на сайте, включая живой предварительный просмотр.

Шаг 1: Проверка шаблона

Ваш код в шаблоне для отображения логотипа и заголовка сайта в целом выглядит правильно, но стоит обратить внимание на несколько аспектов:

  1. Корректное определение переменной логотипа:
    Убедитесь, что значение, возвращаемое функцией get_theme_mod('display_site_title', '0'), сравнивается с true, а не с '1'. Это позволит избежать потенциальных проблем с приведением типов при использовании операций с логическими значениями.
<?php if ( get_theme_mod( 'display_site_title', false ) ) : ?>
    <?php if ( is_front_page() && is_home() ) : ?>
        <h1 class="site-title"><a href="<?php echo esc_url( home_url() ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1>
    <?php else : ?>
        <p class="site-title"><a href="<?php echo esc_url( home_url() ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></p>
    <?php endif; ?>
<?php endif; ?>

Шаг 2: Правильные настройки в Customizer

В вашем файле customizer.php вы правильно добавили настройки для логотипа и заголовка сайта, однако убедитесь, что default для display_logo "true" соответствует вашему изначальному предположению о том, что логотип должен отображаться по умолчанию.

$wp_customize->add_setting( 'display_logo', array(
    'default'           => true, // Логотип по умолчанию должен отображаться
    'transport'         => 'postMessage'
) );
$wp_customize->add_control( 'display_site_title', array(
    'default'           => false, // Заголовок сайта по умолчанию скрыт
) );

Шаг 3: JavaScript для динамического обновления содержимого

Ваш JavaScript-код, вероятно, требует проверки для функций, отвечающих за обновление заголовка сайта в живом предварительном просмотре. Убедитесь, что применяемый селектор корректен и класс hidden правильно применяется и убирается.

// Динамическое изменение заголовка сайта
wp.customize( 'display_site_title', function( value ) {
    value.bind( function( to ) {
        if ( to ) {
            $( '.site-title' ).removeClass( 'hidden' ); // Показываем заголовок
        } else {
            $( '.site-title' ).addClass( 'hidden' ); // Скрываем заголовок
        }
    });
});

Шаг 4: Альтернативный подход через CSS

Если вам нужно скрывать элементы через CSS в зависимости от настроек, вы можете использовать функцию, добавляющую стили в <head> вашего документа. Это может быть полезно, если JavaScript не срабатывает так, как вы ожидали:

function customizer_custom_css() {
    $display_site_title = get_theme_mod('display_site_title', false);
    ?>
    <style type="text/css">
    <?php if (!$display_site_title) : ?>
        .site-title { display: none; }
    <?php endif; ?>
    </style>
    <?php
}
add_action('wp_head', 'customizer_custom_css');

Заключение

Эти шаги должны помочь вам настроить функциональность отображения логотипа и заголовка сайта в вашем WordPress-теме. Такие настройки обеспечивают более гибкий и интуитивно понятный интерфейс для пользователей, а также помогают улучшить пользовательский опыт на сайте. Не забывайте тестировать изменения на разных устройствах для обеспечения полной совместимости и удобства. Если проблема persists, рекомендуется также проверить консоль разработчика на наличие JavaScript-ошибок, которые могут влиять на работу вашего скрипта.

Оцените материал
Добавить комментарий

Капча загружается...