所有我的选项都存储在一个数组中test_hs_options
我有select 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>\';
}
最合适的回答,由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,而不是它是否显式是一个数组。)