レギュラーセレクトのドロップダウンがあります。 Multiselectでドロップダウンが必要です。 JavaScriptスクリプトファイルをheader.php
内に追加しました。今度は文字列multiple="multiple"
を追加する必要があります。
Firebugではmultiple = "multiple"
を文字列で
今、私はこのブロックに文字列multiple="multiple"
を追加する必要があります、しかし、私はこれがどのようにするかについてわかりません:
<?php
$terms = wp_get_post_terms( $post->ID,"listing_category" );
$terms = isset($terms[0]) ? $terms[0]->term_id : "";
if(get_field("custom_attributes_input_types","options") == "Dropdowns"):
wp_dropdown_categories(
array(
'taxonomy' => 'listing_category',
'hiera`enter code here`rchical'=>1,
'show_option_none'=>__('Choose Category:','um_lang'),
'name' => 'listing_category',
'hide_empty' => false,
'selected' => $terms
)
);
else:
?>
wp_dropdown_categories()
のソースを見てください。出力をレンダリングするのに walk_category_dropdown_tree()
を使います。その直後に、最後のMarkUpを変更することができる wp_dropdown_cats
という名前のフィルタ があります。
$output = apply_filters( 'wp_dropdown_cats', $output );
これで、正規表現とpreg_replace
を使用することも、DOMDocument
などを使用して解析することもできます。
select
elements Name
属性も変更する必要があることに注意してください。そうしないと、配列を保存できません。例:
<select multiple name="foo[]" ...>
それでもwalker
引数を変更してWalker自体を書き直す必要があります。その理由は in Walker_CategoryDropdown::start_el
と読むことができます。
if ( $category->term_id == $args['selected'] )
$output .= ' selected="selected"';
ご覧のとおり、現在は配列ではなく単一の値のみがチェックされています。だから基本的にあなたの配列に対するチェックが必要になるでしょう。配列をチェックするオーバーライドメソッドの例:
public function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
$pad = str_repeat(' ', $depth * 3);
$cat_name = apply_filters('list_cats', $category->name, $category);
$output .= "<option class=\"level-{$depth}\" value=\"{$category->term_id}\"";
# >>> HERE WE GO:
if ( in_array( $category->term_id, $args['selected'] ) )
$output .= ' selected="selected"';
$output .= '>';
$output .= $pad.$cat_name;
if ( $args['show_count'] )
$output .= "({$category->count})";
$output .= "</option>";
}
上記のメソッドをWalker_CategoryDropdown
を拡張する新しいクラスに入れ、その新しいWalkerクラスを引数としてwp_dropdown_categories()
のargs配列に入れます。
wp_dropdown_categories( array(
'walker' => new Custom_Walker_CategoryDropdown
'selected' => get_option( 'foo' )
# etc…
) );
ご覧のとおり、上記のname="foo[]"
に由来するオプションfoo
を追加しました。具体的な実装はあなた次第です。この答えはあなたの解決へのガイドとして役立つでしょう。