Ich denke, dass dies eher ein Problem mit meinem PHP als mit der Verwendung der Einstellungs-API ist, aber ich kann Wordpress anscheinend nicht dazu bringen, ein Array von Daten für eine Mehrfachauswahlbox zu speichern.
Das Mehrfachauswahlfeld entspricht einem benutzerdefinierten Metafeld, und die Auswahloptionen sind die benutzerdefinierten Beitragstypen, die dieses Metafeld anzeigen.
Hier ist der Anzeigecode:
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
wird hier als "Auswahl" definiert:
$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" )
);
Und der Validierungscode:
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;
Wenn ich derzeit mehr als einen Wert aus dem Mehrfachauswahlfeld auswähle, speichert WP derzeit nur einen Wert (normalerweise den ersten alphabetischen Wert). Ich brauche es, um mehr als einen Wert im Array zu speichern.
Ich dachte, das Hinzufügen []
zum Ende [$id]
könnte helfen, aber nein.
$id
ist das gleiche wie "id" => BUDDHA_SHORTNAME . "_meta_email"
, es ist in einer anderen Funktion definiert. Und ich weiß nicht wirklich, warum ich print_r
dort war, macht nicht viel Sinn, oder?
[]
am Ende des name
Attributs hat mir geholfen. Überprüfen Sie das Namensattribut. Überprüfen Sie die mySQL-Datenbank, welche Einstellungen gespeichert sind?
esc_html()
und esc_html__()
in Ihrem Anzeigecode. Ersteres akzeptiert nur ein Argument; Letzterer akzeptiert ein zweites Argument, die Textdomäne.
$id
? Und warumprint_r
in einem Zuweisungskontext verwenden?