Je pense que cela peut être plus un problème avec mon PHP que mon utilisation de l'API des paramètres, mais je n'arrive pas à obtenir que Wordpress enregistre un tableau de données pour une boîte à sélection multiple.
La zone de sélection multiple correspond à un méta-champ personnalisé et les options de sélection sont les types de publication personnalisés qui afficheront ce méta-champ.
Voici le code d'affichage:
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
est défini ici comme des «choix»:
$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" )
);
Et le code de validation:
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;
Actuellement, si je sélectionne plusieurs valeurs dans le champ de sélection multiple, WP n'enregistrera qu'une seule valeur (généralement la première valeur alphabétique). J'en ai besoin pour enregistrer plus d'une valeur dans le tableau.
Je pensais que l'ajout []
à la fin [$id]
pourrait aider, mais non.
$id
est le même que "id" => BUDDHA_SHORTNAME . "_meta_email"
, il est défini dans une autre fonction. Et je ne sais pas vraiment pourquoi j'y suis allé print_r
, ça n'a pas beaucoup de sens, n'est-ce pas?
[]
à la fin de l' name
attribut m'a aidé. Vérifiez à nouveau l'attribut de nom. Vérifiez-vous la base de données mySQL quels paramètres sont stockés?
esc_html()
et esc_html__()
dans votre code d'affichage. Le premier n'accepte qu'un seul argument; ce dernier accepte un deuxième argument, le domaine du texte.
$id
? Et pourquoi utiliserprint_r
dans un contexte d'attribution?