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.
$id
es lo mismo que "id" => BUDDHA_SHORTNAME . "_meta_email"
se define en otra función. Y realmente no sé por qué lo hice print_r
allí, ¿no tiene mucho sentido?
[]
al final del name
atributo 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_r
en un contexto de asignación?