我有以下用于WordPress下拉单选选项的代码。我想使此代码与多项选择选项一起使用,但不知道如何。请给出解决方案。
<?php
$args=array(
'class' => 'select-submit2',
'hide_empty' => false,
'selected' => $prop_action_category_selected,
'name' => 'prop_action_category',
'id' => 'prop_action_category_submit',
'orderby' => 'NAME',
'order' => 'ASC',
'show_option_none' => __('None','wordpress'),
'taxonomy' => 'property_action_category',
'hierarchical'=> true
);
wp_dropdown_categories( $args ); ?>
亲切问候
尼古拉塔
wp_dropdown_categories()
函数是一个WordPress函数,用于创建类别下拉列表。 您可以根据向函数传递各种参数来指定它输出的方式和内容。
但是,没有参数表明该函数接受将其从单选列表更改为多选列表。
一种简单的方法是更改函数在生成后为您提供的输出。这并不总是解决所有问题的最佳方法,但在这种情况下,有两个关键要素使它成为一种简单的方法:
- 虽然该函数默认回显(打印)其输出,但它接受一个参数来简单地返回 HTML 结果而不输出它(允许您在显示它之前更改它)。
- 将下拉列表更改为多选列表就像在 HTML 标记中添加"多个"一样简单(即将
<select>
更改为<select multiple>
)
你可以调用该函数,在输出之前将结果放在一个变量中,然后使用该 PHP 对该结果的str_replace()
将"multiitple"放入 select 标签中:
/**
* Your args from the question
* plus turning echo off.
* Note the change to the name (adding "[]")
*/
$args = array(
'class' => 'select-submit2',
'hide_empty' => false,
'selected' => $prop_action_category_selected,
'name' => 'prop_action_category[]',
'id' => 'prop_action_category_submit',
'orderby' => 'NAME',
'order' => 'ASC',
'show_option_none' => __('None','wpestate'),
'taxonomy' => 'property_action_category',
'hierarchical'=> true,
'echo' => 0,
);
/** get the dropdown **/
$dropdown = wp_dropdown_categories( $args );
/** insert "multiple" using str_replace **/
$multi = str_replace( '<select', '<select multiple ', $dropdown );
/** output result **/
echo $multi;
传递"0"的"echo"参数告诉函数不输出任何内容(根据需要向数组添加任何其他参数)。 然后str_replace()
对结果运行,结果就是你输出的结果。
请注意,您需要更改"name"参数以传递数组,以便能够传递/获取所有选定项。
根据文档,您需要改用wp_category_checklist()
。但是,如果您需要更脏的解决方案,这应该会有所帮助:
$dropdown = wp_dropdown_categories($args);
$dropdown = str_replace('id=', 'multiple="multiple" id=', $dropdown);
以一种简单而强大的方式,只需将此代码添加到您的functions.php
文件中即可
add_filter( 'wp_dropdown_cats', 'wp_dropdown_cats_multiple', 10, 2 );
function wp_dropdown_cats_multiple( $output, $r ) {
if( isset( $r['multiple'] ) && $r['multiple'] ) {
$output = preg_replace( '/^<select/i', '<select multiple', $output );
$output = str_replace( "name='{$r['name']}'", "name='{$r['name']}[]'", $output );
foreach ( array_map( 'trim', explode( ",", $r['selected'] ) ) as $value )
$output = str_replace( "value='"{$value}'"", "value='"{$value}'" selected", $output );
}
return $output;
}
并添加多个参数,如下所示:
<div class="ci-select">
<?php
wp_dropdown_categories( array(
'taxonomy' => 'property_location',
'hierarchical' => true,
'show_option_none' => esc_html_x( '-', 'any property location', 'ci_theme' ),
'option_none_value' => '',
'name' => 's_property_location',
'id' => 'property_location',
'selected' => isset( $_GET['s_property_location'] ) ? $_GET['s_property_location'] : '', // e.x 86,110,786
'multiple' => true
) );
?>
</div>