0

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

</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>
4

1 回答 1

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.phpWalker_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* 参数给出的选项)将不起作用。
于 2013-02-18T23:56:17.660 回答