0

次のwp_dropdown_categories呼び出しを取得して、ユーザーが以前に送信したものに基づいて値を事前に選択しようとしています。これは、より大きなユーザープロファイル編集フォームの一部です。値は問題なく引き込まれますが、以前に選択されている場合は自動的に強調表示されません。どんな助けでもいただければ幸いです!! job_ind_pref_call = customuserprofielフィールド。

</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 に答える