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.
fuente
$id
? ¿Y por qué se usaprint_r
en un contexto de asignación?$id
es lo mismo que"id" => BUDDHA_SHORTNAME . "_meta_email"
se define en otra función. Y realmente no sé por qué lo hiceprint_r
allí, ¿no tiene mucho sentido?[]
al final delname
atributo me ayudó. Verifique dos veces el atributo de nombre. ¿Comprueba la base de datos mySQL qué configuraciones están almacenadas?esc_html()
yesc_html__()
en su código de visualización. El primero acepta solo un argumento; este último acepta un segundo argumento, el dominio de texto.Respuestas:
Entonces, parece que dos cosas están sucediendo aquí:
Como señaló @Radek, podría haber convertido el nombre del cuadro de selección en una matriz utilizando
[]
, por ejemploname="my_option_name[]"
, esto dará como resultado que el archivo$_POST['my_option_name']
sea una matriz de opciones seleccionadas que luego puede almacenar.Una mirada más cercana a su código me ha dejado perplejo:
Solo está guardando un valor
$valid_input[$option['id']]
: ¿suswitch
declaración está en un bucle? Si es así, intente cambiar la última línea a esta:Tenga en cuenta el
[]
operador antes de la asignación. Cuando guarde$valid_input
, debe tratar el valor de$valid_input[$option['id']]
como una matriz.fuente