我有一个设置

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 );
许可以下: CC-BY-SA归因
scroll top