我只想从Customizer中的一个字段中输出值。
这是创建设置及其控件的代码(当前主题位于functions.php中):
<?php
add_action(\'customize_register\', \'h2c_customize_register\');
function h2c_customize_register($wp_customize) {
$wp_customize->add_setting(
\'h2c[logo_width_px]\', array (
\'default\' => \'\',
\'capability\' => \'edit_theme_options\',
\'type\' => \'option\',
\'transport\' => \'postMessage\',
)
);
$wp_customize->add_control(
\'logo_width_px\', array(
\'label\' => __(\'Logo Width\', \'obf_text\'),
\'section\' => \'h2c_default_things\',
\'settings\' => \'h2c[logo_width_px]\',
)
);
}
这就是我用来获取该字段值的方法:
<?php
echo get_theme_mod( \'h2c[logo_width_px]\' );
?>
但什么都没有。
该字段在自定义程序本身中可见,它确实保存了我在其中输入的值。所以我知道它确实包含数据。在将输出代码放入var\\u dump()之后,我得到bool (false)
, 所以我猜它因为某种原因甚至找不到设置?
我做错什么了吗?现在我已经查看了几十次代码,看不出问题出在哪里。
顺便说一句,我对使用自定义程序很陌生,所以我肯定我做了一些错误的事情,我就是找不到可能的原因。
编辑:我想我解决了。
Edit2:不,我没有。我以为type
从…起option
到theme_mod
解决了,但没有解决。
编辑3:叹气。事实证明,这是两件事的结合:type
应该是theme_mod
名称不能包含任何[]字符。
最合适的回答,由SO网友:Aristeides 整理而成
您正在自定义程序中将该选项注册为option
然后试着把它作为theme_mod
. 如果您只需更改type
从…起option
到theme_mod
当你注册设置时,它会很好地工作。因此,请尝试使用以下代码:
add_action(\'customize_register\', \'h2c_customize_register\');
function h2c_customize_register($wp_customize) {
$wp_customize->add_setting(
\'logo_width_px\', array (
\'default\' => \'\',
\'capability\' => \'edit_theme_options\',
\'type\' => \'option\',
\'transport\' => \'postMessage\',
)
);
$wp_customize->add_control(
\'logo_width_px\', array(
\'label\' => __(\'Logo Width\', \'obf_text\'),
\'section\' => \'h2c_default_things\',
\'settings\' => \'logo_width_px\',
)
);
}
然后要获得以下选项:
echo get_theme_mod( \'logo_width_px\' );
请注意我在上面使用的代码
logo_width_px
而不是
h2c[logo_width_px]
这是因为theme\\u mod是序列化的选项,您无需再做任何事情。