我对php很新,我在主题自定义程序(在自定义WP主题中)创建一个部分来更改顶部横幅图像。一切似乎都运行良好 - 选项显示在自定义程序中,我可以选择和上传图像,并保存更改。所有更改都显示在主题定制器窗口中。但是当刷新主页面时,我看到的只是在应该检索图像/文本等的php标签之外的index.php中。下面是theme-customizer.php文件中的代码(I'我们排除了显示添加文本代码的部分,好像我可以得到图像以显示其余部分应该遵循):
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 -->
如果有人对如何使其发挥作用有任何想法,我将非常感激。
答案 0 :(得分:1)
更改初始代码后(主要使用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 -->
答案 1 :(得分:0)
我在我的环境中测试了你的代码,似乎定制器代码本身(第一个块)工作正常。问题在于第二个块的放置。你可能只是在一个看不见的地方(就像我最初做的那样)。
为了帮助您进行展示位置,需要更多关于横幅应该/不应该展示的信息。
修改强>
最自然的地方是将内容添加到主题header.php
的底部。然后,横幅将始终显示在页面顶部。