Non ho mai visto questo problema. Quel valore predefinito dovrebbe funzionare. Direi di provare a trasformare la chiave in una stringa e impostarla #default_valuecome una stringa. L' #optionsarray può essere passato da array_merge qualche parte, quindi digitando nuovamente le chiavi intere. Se le chiavi sono stringhe, ciò non dovrebbe accadere. Attualmente, il tuo array è simile al seguente:
$options = array(
0 => '0',
500 => '500',
1000 => '1000',
);
Ma il passaggio di tale array array_mergepuò riorganizzare le chiavi di numeri interi in ordine sequenziale:
$options = array(
0 => '0',
1 => '500',
2 => '1000',
);
Se ciò accade, la 500chiave semplicemente non esiste. Questo perché array_mergenon gli piace conservare le chiavi intere, ma è possibile utilizzare le stringhe per impedirlo. Quindi, penso che il tuo array dovrebbe assomigliare di più a questo:
$options = array(
'0' => '0',
'500' => '500',
'1000' => '1000',
);
Quindi puoi impostare il tuo #default_value :
$form['price']['min']['#default_value'] = '500';
Altrimenti, c'è un altro posto in cui default_valuepotrebbe essere sovrascritto?