У меня есть код ниже для варианта выбора 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, которая создает выпадающий список категорий. Вы можете указать, как и что вы хотите выводить на основе передачи различных аргументов функции.
Тем не менее, нет аргумента, что функция принимает, чтобы изменить его с одного на множественный список выбора.
Простой подход состоит в том, чтобы изменить вывод, который выдает функция после ее генерации. Это не всегда лучший подход ко всему, но в этом случае есть два ключевых элемента, которые делают этот простой подход:
<select>
в <select multiple>
)Вы можете вызвать функцию, поместив результаты в переменную до ее вывода, а затем использовать PHP str_replace()
на этот результат, чтобы вставить «mulitple» в тег 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;
Передача аргумента «echo» в «0» говорит функции не выводить ничего (добавляйте любые другие аргументы в массив по мере необходимости). затем 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>