题
我有一个设置
function form($instance) {
$defaults = array(
'title' => 'Recent Products',
'number_products' => 3
);
$instance = wp_parse_args($instance, $defaults);
但是我的标题还可以,但是number_products始终不显示。我在Netbeans进行了调试,发现Form()运行了2次,第一次运行,变量看起来像
$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);
我真的不知道发生了什么事...某些人可以启发我吗?
解决方案
我终于找到了答案,这实际上不是我发布的代码的问题。它在 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;
}
问题在2个地方。我应该使用 is_numeric
超过 is_int
, , 原因是
要测试变量是数字还是数字字符串(例如form Input,始终是字符串),则必须使用is_numeric()。
然后,在其他方面, $old_instance['number_product']
应该是复数的 $old_instance['number_products']
其他提示
我也不确定大约两次。您是否尝试过仅将内容倾倒在功能中而不是调试中?这样的事情:
function form( $instance ) {
var_dump( $instance );
$defaults = array(
'title' => 'Recent Products',
'number_products' => 3
);
$instance = wp_parse_args($instance, $defaults);
var_dump( $instance );