我有这样的设置
function form($instance) {
$defaults = array(
\'title\' => \'Recent Products\',
\'number_products\' => 3
);
$instance = wp_parse_args($instance, $defaults);
但我的标题还可以,但number\\u产品总是不显示。我在netbeans中进行了调试,发现form()运行了2次和1次,变量如下
$instance = array(0)
// after wp_parse_args,
$instance = array(\'title\' => \'Recent Products\', \'number_products\' => 3);
第二次运行时
wp_parse_args
, 我不知道为什么它会跑第二次,
$instance = array(\'title\' => \'Recent Products\', \'number_products\' => null);
// after wp_parse_args
$instance = array(\'title\' => \'Recent Products\', \'number_products\' => null);
我真的不知道发生了什么。。。有什么能启发我吗?
最合适的回答,由SO网友:Jiew Meng 整理而成
我终于找到了答案,其实我发布的代码没有问题。它在update()
作用我有一些验证码
function update($new_instance, $old_instance) {
$instance[\'title\'] = esc_attr(strip_tags($new_instance[\'title\']));
if (is_int($new_instance[\'number_products\'])) {
if ($new_instance[\'number_products\'] > 0)
$instance[\'number_products\'] = $new_instance[\'number_products\'];
else
$instance[\'number_products\'] = 1;
} else {
$instance[\'number_products\'] = $old_instance[\'number_product\'];
}
return $instance;
}
问题出在两个地方。我应该使用
is_numeric
结束
is_int
, 原因是
要测试变量是数字还是数字字符串(例如表单输入,它始终是字符串),必须使用is\\u numeric()。
然后,在else中,$old_instance[\'number_product\']
应该是复数$old_instance[\'number_products\']