WordPress - добавить второй lo go в настройщик - PullRequest
1 голос
/ 11 июля 2020

Я хочу добавить в свою тему другой lo go, который будет использоваться в липком заголовке, когда пользователь прокручивает страницу.

Я пытался сделать это, как здесь: https://wordpress.stackexchange.com/a/256985/185092

Я редактирую тему Underscores, поэтому я добавил код в настройщик. php и вся функция выглядит так:

function mytheme_customize_register( $wp_customize ) {
    $wp_customize->get_setting( 'blogname' )->transport         = 'postMessage';
    $wp_customize->get_setting( 'blogdescription' )->transport  = 'postMessage';
    $wp_customize->get_setting( 'header_textcolor' )->transport = 'postMessage';

    if ( isset( $wp_customize->selective_refresh ) ) {
        $wp_customize->selective_refresh->add_partial(
            'blogname',
            array(
                'selector'        => '.site-title a',
                'render_callback' => 'mytheme_customize_partial_blogname',
            )
        );
        $wp_customize->selective_refresh->add_partial(
            'blogdescription',
            array(
                'selector'        => '.site-description',
                'render_callback' => 'mytheme_customize_partial_blogdescription',
            )
        );
    }

    $wp_customize->add_setting('sticky_header_logo');
    $wp_customize->add_control(new WP_Customize_Image_Control($wp_customize, 'sticky_header_logo', array(
        'label' => 'Sticky Header Logo',
        'section' => 'title_tagline', 
        'settings' => 'sticky_header_logo',
        'priority' => 8 
    )));
}
add_action( 'customize_register', 'mytheme_customize_register' );

и в заголовке. php У меня есть:

            <div class="site-branding">
                <?php the_custom_logo(); ?>
            </div>
            <div class="site-branding-alternative">
                <?php get_theme_mod( 'sticky_header_logo' ) ?>
            </div>

Я буду использовать display none и block для отображения одного lo go или другого, но теперь css не выполняется, поэтому должны появиться оба логотипа. Проблема в том, что у меня есть возможность добавить второй lo go в Appearance - Customize - Site identity, но он не отображается на странице.

Что я сделал не так?

edit :

<?php var_dump(get_theme_mods()); ?>

дал мне такой код:

array(7) {
  [0]=>bool(false) 
  ["nav_menu_locations"]=>array(1) {
    ["menu-1"]=>int(2)
  }
  ["custom_css_post_id"]=>int(-1) 
  ["header_image"]=>string(75) "http://localhost/whites/wp-content/uploads/2020/07/cropped-header-image.png" 
  ["header_image_data"]=>object(stdClass)#1138 (5) {
    ["attachment_id"]=>int(15) ["url"]=>string(75) "http://localhost/whites/wp-content/uploads/2020/07/cropped-header-image.png" ["thumbnail_url"]=>string(75) "http://localhost/whites/wp-content/uploads/2020/07/cropped-header-image.png" ["height"]=>int(473) ["width"]=>int(1000)
  }
  ["custom_logo"]=>int(18) 
  ["sticky_header_logo"]=>string(63) "http://localhost/whites/wp-content/uploads/2020/07/logo-3-1.png"
}

1 Ответ

1 голос
/ 11 июля 2020

Теперь, когда мы рассмотрели проблему шаг за шагом, мы знаем, что код в customizer.php работает, потому что:

  • get_theme_mods возвращает ваш файл lo go, поэтому проблема не в базы данных или модов темы.
  • var_dump показывает, что файл lo go сохранен в ключе массива sticky_header_logo, как и ожидалось.

Проблема:

Это означает, что проблема должна быть в header.php, поэтому мы сузили круг вопросов, с чего начать поиск проблемы с кодированием. Чудеса отладки :) Если мы посмотрим на код, который вы используете, чтобы показать второй lo go:

<div class="site-branding-alternative">
    <?php get_theme_mod( 'sticky_header_logo' ) ?>
</div>

Вы используете от get_theme_mod до get значение из sticky_header_logo, что правильно ... но вы не отображаете результат. Эта функция не выводит lo go так же, как the_custom_logo, она просто возвращает URL-адрес.

Чтобы устранить проблему:

Вам необходимо создать тег <img>, используя URL-адрес, возвращенный из get_theme_mod, и отобразить его на экране, например:

<div class="site-branding-alternative">
    <?php 
    $sticky_logo_url = get_theme_mod( 'sticky_header_logo' );
    if ($sticky_logo_url )
       echo '<img src="'.$sticky_logo_url.'" alt = "logo alt test" class="sticky_logo_class">';
    ?>
</div>

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...