Sto pensando che questo potrebbe essere più un problema con il mio PHP piuttosto che il mio uso dell'API delle impostazioni, ma non riesco a convincere Wordpress a salvare un array di dati per una casella a selezione multipla.
La casella di selezione multipla corrisponde a un meta campo personalizzato e le opzioni di selezione sono i tipi di post personalizzati che visualizzeranno quel campo meta.
Ecco il codice visualizzato:
case 'select2':
echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>";
foreach($choices as $item) {
$item = explode("|",$item);
$item[0] = esc_html($item[0], 'buddha_textdomain');
$selected = ($options[$id]==$item[1]) ? 'selected="selected"' : '';
echo "<option value='$item[1]' $selected>$item[0]</option>";
}
echo "</select>";
echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : "";
break;
$choices
è definito qui come "scelte":
$options[] = array(
"section" => "custom_meta",
"id" => BUDDHA_SHORTNAME . "_meta_email",
"title" => __( 'Email Meta Box', 'buddha_textdomain' ),
"desc" => __( 'Select post types to have custom email meta box.', 'buddha_textdomain' ),
"type" => "select2",
"std" => print_r($buddha_option_name[$id]),
"choices" => array( __('Posts','buddha_textdomain') . "|post", __('Pages','buddha_textdomain') . "|page", __('Faculty/Staff','buddha_textdomain') . "|staff", __('FAQ','buddha_textdomain') . "|faq", __('Documents','buddha_textdomain') . "|docs", __('Courses','buddha_textdomain') . "|courses" )
);
E il codice di convalida:
case 'select2':
// process $select_values
$select_values = array();
foreach ($option['choices'] as $k => $v) {
// explode the connective
$pieces = explode("|", $v);
$select_values[] = $pieces[1];
}
// check to see if selected value is in our approved array of values!
$valid_input[$option['id']] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' );
break;
Attualmente, se seleziono più di un valore dal campo di selezione multipla, WP salverà solo un valore (di solito il primo valore alfabetico). Ne ho bisogno per salvare più di un valore nell'array.
Ho pensato che aggiungere []
alla fine di [$id]
potesse essere d'aiuto, ma no.
$id
è uguale a "id" => BUDDHA_SHORTNAME . "_meta_email"
, è definito in un'altra funzione. E non so davvero perché l'ho fatto print_r
lì, non ha molto senso vero?
[]
alla fine name
dell'attributo mi ha aiutato. Controlla nuovamente l'attributo name. Controlli il db mySQL quali impostazioni sono memorizzate?
esc_html()
e esc_html__()
nel tuo codice di visualizzazione. Il primo accetta solo un argomento; quest'ultimo accetta un secondo argomento, il dominio di testo.
$id
? E perché lo stai usandoprint_r
in un contesto assegnato?