如何在WordPress多选框(wp_dropdown_categories)中预先选择值?

时间:2013-02-18 22:58:47

标签: php wordpress forms

我试图让以下wp_dropdown_categories调用根据用户之前提交的内容预先选择值。这是更大的用户配置文件编辑表单的一部分。这些值被拉得很好,但如果先前已选择它们,则不会自动突出显示。任何帮助,将不胜感激!! job_ind_pref_call =自定义用户profiel字段。

</label> <?php
    $sel = 0;
    $sel1 = get_user_meta($user_ID, 'job_ind_pref_call', true);
    if(isset($_POST['job_ind_pref_call'])) {

        $sel1 = $_POST['job_ind_pref_call'];
    }
    if (isset($posted['job_term_cat']) && $posted['job_term_cat']>0) $sel = $posted['job_term_cat'];
    global $featured_job_cat_id;
    $args = array(
        'orderby'            => 'name',
        'exclude'            => 3,
        'order'              => 'ASC',
        'name'               => 'job_ind_pref_call[]',
        'hierarchical'       => 1,
        'echo'               => 0,
        'class'              => 'job_cat',
        'selected'           => $sel1,
        'taxonomy'           => 'job_cat',
        'hide_empty'         => false
    );


    $dropdown = wp_dropdown_categories( $args );
    $dropdown = str_replace('class=\'job_cat\' >','class=\'job_cat\' multiple="multiple" size="6" onClick=GetMDDselections("job_ind_pref_call") ><option value="">'.__('Select a Line&hellip;', 'colabsthemes').'</option>',$dropdown);
    echo $dropdown;
?> </p>

1 个答案:

答案 0 :(得分:0)

首先,WordPress工作人员建议您使用wp_category_checklist()来表示多个值。

如果你仍然坚持使用wp_dropdown_categories(),你必须准备好使用......非正式的方式来使选定的选项有效。

以下是您需要做的事情:

1-将新的自定义参数和新的Walker类(我们将在步骤2中定义)传递给wp_dropdown_categories()函数。假设我们称这个函数为:

<?php 
wp_dropdown_categories( array( 
    '_selected' => $selected_cats_arr, 
    'walker' => 'CategoryDropdownMultiple'
) ); 
?>

2-创建一个新的Walker类,配置为根据我们的新自定义参数选择选项。 Walker的代码基于 wp-includes / category-template.php 中定义的Walker_CategoryDropdown

<?php
class Walker_CategoryDropdownMultiple extends Walker {
    var $tree_type = 'category';

    var $db_fields = array ('parent' => 'parent', 'id' => 'term_id');


    function start_el( &$output, $category, $depth, $args, $id = 0 ) {
        $pad = str_repeat('&nbsp;', $depth * 3);

        $cat_name = apply_filters('list_cats', $category->name, $category);
        $output .= "\t<option class=\"level-$depth\" value=\"".$category->term_id."\"";

        // HERE IS THE ONLY CHANGE FROM THE ORIGINAL FILE
        // We check our custom parameter which is an array instead of a single value.
        if ( isset( $args['_selected'] ) && in_array( $category->term_id, $args['_selected'] ) )
            $output .= ' selected="selected"';
        $output .= '>';
        $output .= $pad.$cat_name;
        if ( $args['show_count'] )
            $output .= '&nbsp;&nbsp;('. $category->count .')';
        $output .= "</option>\n";
    }
}
?>

注意:

  • 我们无法使用原始选择的参数的原因是它应该是wp_dropdown_categories()及以后的单个值。
  • 请注意,因为我们正在为所选选项使用自定义参数,所以本机功能(例如自动选择使用* show_option_all *和* show_option_none *参数给出的选项)将不起作用。