微件实例选项未正确显示

时间:2010-09-15 作者:Jiew Meng

我有这样的设置

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);
我真的不知道发生了什么。。。有什么能启发我吗?

2 个回复
最合适的回答,由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\']

SO网友:Rarst

我也不确定是否有两分。您是否尝试过在函数中转储内容而不是调试?类似这样:

function form( $instance ) {

    var_dump( $instance );

    $defaults = array(
        \'title\' => \'Recent Products\',
        \'number_products\' => 3
    );
    $instance = wp_parse_args($instance, $defaults);

    var_dump( $instance );

结束

相关推荐