我认为我的插件设置最终可以使用默认值,而不需要用它们覆盖db,但这只是acau_update_delay
这是数值,不用于复选框。默认情况下,这两个复选框都处于选中状态,不幸的是,当我取消选中它们并保存设置时,它们会再次被选中。
我甚至研究了为什么我不能让它工作,但找不到用我的实现来解决它的方法。问题是数据库中只保存选中的复选框。因此,如果未选中它们,则不会有db条目,例如options[\'acau_cart_notices_off\']
将丢失,而不是方便的值为0。
因此,我的职能acau_get_settings
将覆盖这些缺失的设置值,每个复选框的默认值为1,而不是将它们单独保留。
我怎样才能修复它?
public function acau_get_settings( $index = false ) {
$defaults = array ( \'acau_update_delay\' => 1000,\'acau_positive_qty\' => 1,\'acau_cart_notices_off\' => 1 );
$settings = get_option( \'acau_settings\', $defaults );
$settings = wp_parse_args( $settings, $defaults );
if ( $index && isset( $settings[ $index ] ) ) {
return $settings[ $index ];
}
return $settings;
}
我开始像这样创建设置页面,调用函数
acau_get_settings
:
public function create_settings_page()
{
$this->options = $this->acau_get_settings();
以下是复选框设置之一的回调:
public function acau_cart_notices_off_callback() {
printf(
\'<fieldset>
<label><input id="acau_cart_notices_off" type="checkbox" name="acau_settings[acau_cart_notices_off]" value="1" %1$s />%2$s</label>
</fieldset>\',
isset( $this->options[\'acau_cart_notices_off\'] ) && ( 1 == $this->options[\'acau_cart_notices_off\'] ) ? \'checked="checked" \':\'\',
__( \'Turn off notices on cart page. Most common are "Cart updated." and notice about product removed from cart.\', \'ajax-cart-autoupdate\' )
);
}
最合适的回答,由SO网友:Ryszard Jędraszyk 整理而成
我做了一些调试,结果发现这一行导致了错误的行为:
$settings = wp_parse_args( $settings, $defaults );
我想知道为什么它在这一行后面,这一行应该也有同样的作用:
$settings = get_option( \'acau_settings\', $defaults );
这两行一行接一行的代码是一位智者编写的,所以我想这可能是某种倒退。看起来只有后者才能正确地用于复选框。