Я новичок в php и создаю раздел в настройщике тем (в пользовательской теме WP), чтобы изменить верхнее изображение баннера. Кажется, все работает хорошо — параметры отображаются в настройщике, я могу выбирать и загружать изображения, а также сохранять изменения. Все изменения отображаются в окне настройщика темы. Но при обновлении главной страницы я вижу только то, что находится в index.php вне тегов php, которые должны извлекать изображения / текст и т. Д. Ниже приведен код в файле theme-customizer.php (я исключил разделы, показывающие код для добавления текста, как будто я могу получить изображение, чтобы показать остальное, должны следовать):
add_action('customize_register', 'k1_customize_register');
function k1_customize_register($wp_customize) {
// Top Banner Image
$wp_customize->add_section('k1_banner', array(
'title' => __('K1 Top Banner', 'k1-framework'),
'description' => __('Allows you to upload a banner image to display underneath the main navigation.', 'k1-framework'),
'priority' => 36
));
// Add setting for checkbox for banner image display
$wp_customize->add_setting('k1_custom_settings[display_k1_banner]', array(
'default' => 0,
'type' => 'option'
));
// Add control for checkbox for banner image display
$wp_customize->add_control('k1_custom_settings[display_k1_banner]', array(
'label' => __('Display the Top Banner Image?', 'k1-framework'),
'section' => 'k1_banner',
'settings' => 'k1_custom_settings[display_k1_banner]',
'type' => 'checkbox'
));// Add setting for top banner image
$wp_customize->add_setting('k1_banner', array(
'default' => 'http://lorempixel.com/1200/300',
'type' => 'theme_mod',
'active_callback' => 'is_front_page',
'sanitize_callback' => 'esc_url_raw'
));
// Add control for top banner image
$wp_customize->add_control('k1_banner', array(
'label' => __('Upload the Top Banner Image', 'k1-framework'),
'section' => 'k1_banner'));
// Add setting for banner heading
$wp_customize->add_setting('k1_banner_heading', array(
'default' => 'What can K1 do for you?',
'type' => 'theme_mod',
'sanitize_callback' => 'sanitize_text_field'
));
// Add control for banner heading
$wp_customize->add_control('k1_banner_heading', array(
'label' => __('Banner heading text', 'k1-framework'),
'section' => 'k1_banner',
'type' => 'text'
));
// Add setting for banner description
$wp_customize->add_setting('k1_banner_desc', array(
'default' => 'Lorem ipsum dolor sit amet',
'type' => 'theme_mod',
'sanitize_callback' => 'sanitize_text_field'
));
// Add control for banner description
$wp_customize->add_control('k1_banner_desc', array(
'label' => __('Banner description text', 'k1-framework'),
'section' => 'k1_banner',
'type' => 'text'
));
// Add setting for banner link
$wp_customize->add_setting('k1_banner_link', array(
'default' => '#',
'type' => 'theme_mod',
'sanitize_callback' => 'esc_url_raw'
));
// Add control for banner link
$wp_customize->add_control('k1_banner_link', array(
'label' => __('Banner read more link', 'k1-framework'),
'section' => 'k1_banner',
'type' => 'text'
));
//adding setting for banner link text area
$wp_customize->add_setting('k1_banner_link_text', array(
'default' => 'More',
'sanitize_callback' => 'sanitize_text_field'
));
$wp_customize->add_control('k1_banner_link_text', array(
'label' => 'Read more link text here',
'section' => 'k1_banner',
'type' => 'text',
));
}
А вот код в index.php:
И в index.php, где называется код php:
<div class="row">
<div class="col-lg-12 top-banner"><?php if($options['display_k1_banner'] != '') : ?>
<div class="top-banner-inner"><img src="<?php echo get_theme_mod( 'k1_banner' ); ?>" alt="Banner image" /><h1><?php echo get_theme_mod( 'k1_banner_heading' ); ?></h1>
<p><?php echo get_theme_mod( 'k1_banner_desc' ); ?></p>
<a class="button" href="<?php echo get_theme_mod( 'k1_banner_link' ); ?>"><em><?php echo get_theme_mod( 'k1_banner_link_text' ); ?></em></a></div> <!-- end top-banner-inner -->
<?php endif; ?></div> <!-- end top-banner -->
</div> <!-- end row -->
Оригинальный HTML, где должен был быть баннер:
<!-- TOP BANNER -->
<div class="container">
<div class="row">
<div class="col-lg-12 top-banner">
<div class="top-banner-inner">
<img src="http://lorempixel.com/1200/300" alt="Banner image" />
<h1>Heading text</h1>
<p>Lorem ipsum dolor sit amet</p>
<a class="button" href=""><em>More</em></a></div> <!-- end top-banner-inner --></div> <!-- end top-banner -->
</div> <!-- end row -->
</div> <!-- end container -->
Если у кого-то есть идеи, как заставить это работать, я был бы очень признателен.
После изменения исходного кода (используя theme_mod вместо опций в первую очередь — см. Выше отредактированный q), я нашел обходное решение проблемы. То, что происходило, было то, что значения по умолчанию не были сохранены или зарегистрированы. При установке значений по умолчанию непосредственно в index.php все параметры настройщика темы теперь отображаются на главной странице.
Ниже приведен новый код из index.php:
<div class="col-lg-12 top-banner"><?php if($options['display_k1_banner'] != '') : ?>
<div class="top-banner-inner"><img src="<?php echo get_theme_mod( 'k1_banner', 'http://lorempixel.com/1200/300' ); ?>" alt="Banner image" /><h1><?php echo get_theme_mod( 'k1_banner_heading', 'What can K1 do for you?' ); ?></h1>
<p><?php echo get_theme_mod( 'k1_banner_desc', 'Lorem ipsum dolor sit amet' ); ?></p>
<a class="button" href="<?php echo get_theme_mod( 'k1_banner_link', '#' ); ?>"><em><?php echo get_theme_mod( 'k1_banner_link_text', 'More' ); ?></em></a></div> <!-- end top-banner-inner -->
<?php endif; ?></div> <!-- end top-banner -->
Я проверил ваш код в своей среде, и кажется, что сам код настройщика (первый блок) работает нормально. Проблема как раз с размещением второго блока. Вы, вероятно, просто имеете это в месте, которое не видно (как я сделал сначала).
Чтобы помочь вам с размещением, необходима дополнительная информация о том, где именно / не должен быть показан баннер.
РЕДАКТИРОВАТЬ:
Самое естественное место для начала — это добавить контент в конец темы. header.php
, Тогда баннер всегда будет отображаться в верхней части страницы.