WordPress Customizer在初始安装时没有设置默认值吗?

时间:2016-12-07 作者:Charlie Coplestone

我在首次安装时获取WordPress自定义程序中设置的默认值以保存到数据库时遇到一些问题,而无需用户先保存自定义程序以进行设置。我尝试了此线程的解决方案,但没有成功:

Use default value of wp_customizer in theme_mod output?

Customizer section/setting/control

//Social Icons Section
$wp_customize->add_section( \'socialsection\', array(
         \'title\'      => __( \'Social Media\' ),
         \'priority\'   => 4,
         \'capability\' => \'edit_theme_options\',
) );


//Settings & Controls For Social Media

$wp_customize->add_setting( \'facebooklink_edit\', array(
        \'default\'           => \'#\',
        \'sanitize_callback\' => \'esc_attr\',
        \'transport\'         => \'refresh\',
) );

$wp_customize->add_control(\'facebooklink_edit\', array(
         \'label\'    => __( \'Facebook Link\', \'spiffing\' ),
         \'section\'  => \'socialsection\',
) );
前端输出:

<a href="<?php echo get_theme_mod(\'facebooklink_edit\', \'#\'); ?>"><div class="fb-footer" id="fb-footer-bg"><i class="fa fa-facebook-f"></i></div></a>
基于customzier中用户操作的CSS操作:

 ?>
  <style type="text/css">
  <?php if( get_theme_mod( \'facebooklink_edit\' )  ==  \'\' ) { ?>
    #fb-footer-bg { display: none; }
    <?php } // end if ?>
    </style>
    <?php
从上面可以看出,这个mod只是在默认情况下将值设置为“#”,如果它随后检测到没有“#”,则会将“display:none”添加到该id。应该足够简单。但是,if语句似乎看到其条件已满足,即本例为空“”,并应用“display:none”。但正如您在前端和customzier的默认部分中所看到的,我已将默认设置为“#”。它甚至将其写入customzier中的占位符部分,而不是数据库。

如果用户在初始安装后进入自定义程序并单击“保存”,则此功能有效。可能会在数据库中初始化一个值,然后在前端读取和显示该值。

我已经将其用于链接等,但这个mod的不同之处在于它通过添加“display:none”来操纵div。

欢迎提出任何想法。

3 个回复
SO网友:Charlie Coplestone

我已通过更改“if”语句上的运算符来解决此问题:

Original:

?>
<style type="text/css">
 <?php if( get_theme_mod( \'facebooklink_edit\' )  ==  \'\' ) { ?>
   #fb-footer-bg { display: none; }
 <?php } // end if ?>
</style>
<?php

Updated:

?>
<style type="text/css">
<?php if( get_theme_mod( \'facebooklink_edit\' )  ===
    #fb-footer-bg { display: none; }
<?php } // end if ?>
</style>
<?php
将“is equal”更改为“to is idential”似乎可以解决这个问题。

SO网友:prosti

我想你应该用set_theme_mod. 这将把值保存到数据库中。

set_theme_mod(\'facebooklink_edit\',\'aaabbbccc\');
仅为主题使用而保留主题设置\'type\' => \'theme_mod\'.

$wp_customize->add_setting( \'facebooklink_edit\' , array(
    \'type\' => \'theme_mod\', // only for this theme    
    \'transport\'   => \'refresh\', 
    \'default\' => \'aaabbbccc\'
    //\'sanitize_callback\' => \'someething...\',
) );
Thesave() 方法存在于内部class-wp-customize-manager() 但它似乎不打算只与JavaScript一起使用。

通常,主题设置可以是\'theme_mod\'\'option\'.

我给你的建议是theme_mod 在这种情况下。

SO网友:LAUVz

if(!get_theme_mod(\'facebooklink_edit\')) { set_theme_mod(\'facebooklink_edit\',\'aaabbbccc\'); }

我只会在它不存在的情况下使用它来设置值。

而不仅仅是。

set_theme_mod(\'facebooklink_edit\',\'aaabbbccc\');

相关推荐

为什么我的主题的css在另一个网站上不起作用

我在Neve theme的基础上开发我的on theme。首先,我对脚本有问题,因为它不起作用,但我不得不从页脚更改它们的位置。php到标题。php的一切都很好。新的一些脚本无法工作,因为css根本没有加载。我尝试了5种不同的方法,但都失败了。标题中的。php我只是给他们<style> </style></我在函数中使用了寄存器样式。php,标题。php和页脚。php function my_theme_enqueue_styles() { &#x