Estoy pensando que esto puede ser más un problema con mi PHP en lugar de mi uso de la API de configuración, pero parece que no puedo hacer que Wordpress guarde una matriz de datos para un cuadro de selección múltiple.
El cuadro de selección múltiple corresponde a un metacampo personalizado, y las opciones de selección son los tipos de publicación personalizados que mostrarán ese metacampo.
Aquí está el código de visualización:
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 se define aquí como 'opciones':
$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" )
);
Y el código de validación:
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;
Actualmente, si selecciono más de un valor del campo de selección múltiple, WP solo guardará un valor (generalmente el primer valor alfabético). Lo necesito para guardar más de un valor en la matriz.
Pensé que agregar []al final de [$id]podría ayudar, pero no.
$ides lo mismo que "id" => BUDDHA_SHORTNAME . "_meta_email"se define en otra función. Y realmente no sé por qué lo hice print_rallí, ¿no tiene mucho sentido?
[]al final del nameatributo me ayudó. Verifique dos veces el atributo de nombre. ¿Comprueba la base de datos mySQL qué configuraciones están almacenadas?
esc_html()y esc_html__()en su código de visualización. El primero acepta solo un argumento; este último acepta un segundo argumento, el dominio de texto.
$id? ¿Y por qué se usaprint_ren un contexto de asignación?