如何使用插件选项页面的设置API保存多选数组?

时间:2013-06-26 作者:Spartacus

我认为这可能是我的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; 
目前,如果我从multi-select字段中选择多个值,WP将只保存一个值(通常是第一个字母值)。我需要它在数组中保存多个值。

我想添加[] 至年底[$id] 可能会有帮助,但不会。

1 个回复
SO网友:phatskat

看来这里发生了两件事:

echo "<select id=\'$id\' style=\'width:15em;height:10em;\' class=\'select$field_class\' name=\'" . $buddha_option_name . "[$id]\' multiple>";  
如@Radek所述,您可以通过使用[] - e、 g。name="my_option_name[]" - 这将导致$_POST[\'my_option_name\'] 是您可以存储的选定选项的数组。

仔细看一下您的代码,我很困惑:

$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\']] : \'\' ); 
您只保存了一个值$valid_input[$option[\'id\']] - 是你的switch 循环中的语句本身?如果是,请尝试将最后一行更改为:

$valid_input[$option[\'id\']][] = (in_array( $input[$option[\'id\']], $select_values) ? $input[$option[\'id\']] : \'\' );
请注意[] 在赋值运算符之前。保存时$valid_input, 它应该处理$valid_input[$option[\'id\']] 作为数组。

结束