私はWordPressのコアを迂回してwp_dropdown_categories()
をmultiple="multiple"
と共にこのように を使っています。今まで(WP 4.4.1)は、その選択フィールドでmultiple
をサポートしていません。 ( コアチケット )
私はselected
パラメータに苦労しています。 selected
パラメータがどの複数のオプションが選択されるべきかを理解することができるようにどうすれば複数の値を渡すことができますか?
選択のために配列の値をサポートする独自の関数を書くことによってのみ可能だと思います。
簡単な方法は?
ありがとう@markkaplun。私はそれを自分で書いて解決した:
<?php
/**
* Dropdown for 'my_tax'
* @since 1.0.0 Using wp_dropdown_categories().
* @since 2.0.3 Custom code, as wp_dropdown_categories() doesn't provide
* 'selected' field for multiple="multiple"
*/
$my_tax_terms = get_terms( 'my_tax', array('hide_empty'=>false) );
echo '<select required multiple="multiple" name="my_tax[]" id="my-tax" class="postform">';
foreach ($my_tax_terms as $tax_term) {
$selected = !empty($_POST['my_tax']) && in_array( $tax_term->term_id, $_POST['my_tax'] ) ? ' selected="selected" ' : '';
echo '<option value="'. $tax_term->term_id .'" '. $selected .'>'. $tax_term->name .'</option>';
}
echo '</select>';
コアチケット(例えば https://core.trac.wordpress.org/ticket/16734 )が言うように、apiのポイントはドロップダウンを提供することであり、複数選択を提供することではありません。 IIRCの投稿のクイック編集では、APIはカテゴリとタグに使用されていません。
言い換えれば、単にAPIを無視して、あなた自身のものを書いてください。
その答えで説明したのと同じようなことができ、wp_category_dropdown
を使用してwp_dropdown_cats
からの出力をフィルタリングできますが、selectの代わりにoptionsを使用するなどです。
add_filter('wp_dropdown_cats', 'wp_dropdown_categories_multiselect');
function wp_dropdown_categories_multiselect($output) {
$valuekey = 'valuekey'; // set to 'name' argument passed
// check this is the correct dropdown
if (strstr($output,'name="'.$valuekey.'"')) {
// add multiple to select (you may already have this)
$output = str_replace('<select ','<select multiple ',$output);
// add square brackets to the name key
$output = str_replace('name="'.$valuekey.'"','name="'.$valuekey.'[]"',$output);
$selectedvalues = get_option($valuekey);
// make sure there is a selected value
if (count($selectedvalues) > 0) {
// loop through the selected values
foreach ($selectedvalues as $value) {
// add the selected to each selected value
$output = str_replace(
'<option value="'.$value.'"',
'<option value="'.$value.'" selected="selected"',
$output
);
}
}
}
return $output;
}
注:値を選択した値の配列としてオプション表に保存していると想定します。例えば。
$valuekey = 'valuekey';
if (isset($_REQUEST[$valuekey])) {
$selectedvalues = $_REQUEST[$valuekey];
if (!add_option('valuekey',$selectedvalues)) {
update_option('valuekey',$selectedvalues);
}
}
もちろんstr_replace
を使用する場合、各出現の最初の値は出力と完全に一致する必要があるので、これを機能させるにはデバッグが必要になるかもしれません。