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.
la source
$id
? Et pourquoi utiliserprint_r
dans un contexte d'attribution?$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()
etesc_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.Réponses:
Donc, il semble que deux choses se passent ici:
Comme indiqué par @Radek, vous auriez pu faire du nom de la boîte de sélection un tableau en utilisant
[]
- par exemplename="my_option_name[]"
- cela se traduira par le fichier$_POST['my_option_name']
étant un tableau d'options sélectionnées que vous pouvez ensuite stocker.Un examen plus approfondi de votre code m'a laissé perplexe:
Vous n'enregistrez qu'une seule valeur dans
$valid_input[$option['id']]
- votreswitch
déclaration est-elle dans une boucle elle-même? Si oui, essayez de changer la dernière ligne en ceci:Notez l'
[]
opérateur avant l'affectation. Lorsque vous enregistrez$valid_input
, il doit traiter la valeur de$valid_input[$option['id']]
comme un tableau.la source