设置API:通过‘Get_Option’设置默认选项失败

时间:2020-10-04 作者:sleeper

所有我的选项都存储在一个数组中test_hs_optionsselect list 设置字段(test_hs_options[\'duration_months\'] ) 存储所选月份(1-12)set a default option 5点

// Callback for displaying sfield_select_duration.
function cb_test_hs_sfield_select_duration() {

    // get option test_hs_options[\'duration_months\'] value from db.
    // Set to \'5\' as default if option does not exist.
    $options  = get_option( \'test_hs_options\', [ \'duration_months\' => \'5\' ] );

    $duration = $options[\'duration_months\']; // fails!

    var_dump($options); // PHP Notice:  Undefined index: duration_months

    // define the select option values for \'duration\' select field.
    $months = array( \'1\', \'2\', \'3\', \'4\', \'5\', \'6\', \'7\', \'8\', \'9\', \'10\', \'11\', \'12\' );

    // Display select control
    echo \'<select id="duration" name="test_hs_options[duration_months]">\';
        // loop through option values
        foreach ( $months as $month ) {
            // if saved option matches the option value, select it.
            echo \'<option value="\' . $month . \'" \' . selected( $duration, $month, false ) . \'>\' . esc_html( $month ) . \'</option>\';
        }
    echo \'</select>\';
}

1 个回复
最合适的回答,由SO网友:Rup 整理而成

我想问题是什么时候

您确实有test\\u hs\\u选项的值,但该值没有“duration\\u months”吗?仅当数据库中没有test\\u hs\\u选项时,才会使用您提供的默认数组:此代码不会向没有duration\\u months的非空数组添加duration\\u。

相反,您可以检查is\\u array和isset以检查$options是否具有duration\\u months值,例如。

// get option test_hs_options[\'duration_months\'] value from db.
// Set to \'5\' as default if option does not exist.
$options  = get_option( \'test_hs_options\' );

if ( is_array( $options ) && isset( $options[\'duration_months\'] ) ) {
    $duration = $options[\'duration_months\'];
} else {
    $duration = 5;
}
(我想你也可以if ( $options && ... ) 而不是if ( is_array( $options) && ... ) 也就是说,只需测试$options的计算结果是否为true,而不是它是否显式是一个数组。)