未使用任何设置时不打印定制器样式

时间:2019-06-13 作者:pickos7

我正在通过我的插件为主题添加一些选项,我想改变这个主题的样式,我几乎做到了。。。现在我需要知道如何隐藏<style> 没有更改任何设置时标记(所有默认值均未使用),

function myplugin_customize_css(){
?>
 <style>
     h2 {color:<?php echo get_theme_mod(\'myplugin_h2_color\'); ?>;}
     h3 {color:<?php echo get_theme_mod(\'myplugin_h3_color\'); ?>;}
     p {
        color:<?php echo get_theme_mod(\'myplugin_p_color\'); ?>;
        font-size:<?php echo get_theme_mod(\'myplugin_p_size\'); ?>;
     }
     // more & more of these! 
 </style>
<?php
}
add_action( \'wp_head\', \'myplugin_customize_css\');
我能做到if() 但是感觉太多了,我还有什么其他方法可以做到这一点。。。不是这样的:

function myplugin_customize_css(){
    if (get_theme_mod(\'myplugin_h2_color\') != \'\' 
        || get_theme_mod(\'myplugin_h3_color\') !=\'\'
        || get_theme_mod(\'myplugin_p_color\') !=\'\'
        || get_theme_mod(\'myplugin_p_size\') !=\'\' ) {
        ?>
        <style>
            // if get_theme_mod(\'myplugin_h2_color\') != \'\'
             h2 {color:<?php echo get_theme_mod(\'myplugin_h2_color\'); ?>;}

             // if get_theme_mod(\'myplugin_h3_color\') != \'\'
             h3 {color:<?php echo get_theme_mod(\'myplugin_h3_color\'); ?>;}

             // if get_theme_mod(\'myplugin_p_color\') !=\'\' 
             //    && get_theme_mod(\'myplugin_p_size\') !=\'\' 
             p {
                // if get_theme_mod(\'myplugin_p_color\') !=\'\' 
                color:<?php echo get_theme_mod(\'myplugin_p_color\'); ?>;
                // if get_theme_mod(\'myplugin_p_size\') !=\'\'
                font-size:<?php echo get_theme_mod(\'myplugin_p_size\'); ?>;
             }
             // more & more of these! 
         </style>
         <?php
    }
}
add_action( \'wp_head\', \'myplugin_customize_css\');

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

其实没有什么把戏,你需要检查所有的值。通过省略!= \'\', 这是多余的:

if (
    get_theme_mod( \'myplugin_h2_color\' ) ||
    get_theme_mod( \'myplugin_h3_color\' ) ||
    get_theme_mod( \'myplugin_p_color\' ) ||
    get_theme_mod( \'myplugin_p_size\' )
) {
但是,可以将Customiser设置保存到单个数组中。因此,如果您使用以下名称注册设置:

$wp_customize->add_setting( \'myplugin[h2_color]\' );
$wp_customize->add_setting( \'myplugin[h3_color]\' );
$wp_customize->add_setting( \'myplugin[p_color]\' );
$wp_customize->add_setting( \'myplugin[p_size]\' );
然后可以检索数组中的值,如:

get_theme_mod( \'myplugin\' );
如果你这样做,那么你可以使用array_filter() 删除任何空值,并检查生成的数组是否为空。若不是,则至少有一个设置具有值:

$styles = get_theme_mod( \'myplugin\' );

if ( ! empty( array_filter( $styles ) ) ) {
    echo \'<style>\';

    if ( ! empty( $styles[\'h2_color\'] ) {
        printf( \'h2 { color: %s; }\', $styles[\'h2_color\'] );
    }

    // etc.

    echo \'</style>\';
}

相关推荐

The Loop not looping?

在进行了大量的故障排除和搜索之后,我想我终于明白了如何进行循环。但我似乎无法让它真正循环!我创建了一个子主题,并添加了functions.php 文件中包含以下代码:<?php function my_theme_enqueue_styles() { $parent_style = \'grow-thinkup-style-minimal\'; // This is \'twentyfifteen-style\' for the Twenty Fifteen the