我想这可能是我的PHP而不是设置API的问题,但我似乎无法让Wordpress为多选框保存数据数组。
多选框对应于自定义元字段,而选择选项是将显示该元字段的自定义帖子类型。
这是显示代码:
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
在这里定义为“选择”:
$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" )
);
和验证代码:
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;
当前,如果我从多选字段中选择了多个值,WP将仅保存一个值(通常是第一个字母值)。我需要它在数组中保存多个值。
我以为增加[]
结尾[$id]
可能会有所帮助,但没有。
$id
与相同"id" => BUDDHA_SHORTNAME . "_meta_email"
,它是在另一个函数中定义的。而且我真的不知道为什么要去print_r
那儿,这样做不是很有意义吗?
你成功了吗?属性
—
Radek
[]
末尾的Addin name
帮助了我。仔细检查name属性。您是否检查mySQL数据库存储的设置?
与您的问题无关:我认为您感到困惑
—
Pat J
esc_html()
并esc_html__()
在显示代码中。前者只接受一个论点。后者接受第二个参数,即文本域。
$id
啊 为什么要print_r
在分配上下文中使用?