WordPress выпадающий множественный выбор

У меня есть код ниже для варианта выбора 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 );  ?>

С уважением

Николета

2

Решение

wp_dropdown_categories() Функция — это функция WordPress, которая создает выпадающий список категорий. Вы можете указать, как и что вы хотите выводить на основе передачи различных аргументов функции.

Тем не менее, нет аргумента, что функция принимает, чтобы изменить его с одного на множественный список выбора.

Простой подход состоит в том, чтобы изменить вывод, который выдает функция после ее генерации. Это не всегда лучший подход ко всему, но в этом случае есть два ключевых элемента, которые делают этот простой подход:

  1. Хотя функция отображает (выводит на печать) свои выходные данные по умолчанию, она принимает аргумент, чтобы просто возвращать результат HTML, не выводя его (позволяя вам изменить его до его отображения).
  2. Изменить раскрывающийся список на список с несколькими вариантами выбора так же просто, как добавить «несколько» в тег HTML (то есть изменить <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», чтобы передать массив, чтобы иметь возможность передавать / получать все выбранные элементы.

2

Другие решения

Согласно документы вам нужно будет использовать wp_category_checklist() вместо. Однако, если вам нужно более грязное решение, это должно помочь:

$dropdown = wp_dropdown_categories($args);
$dropdown = str_replace('id=', 'multiple="multiple" id=', $dropdown);
0

Просто и мощно, просто добавьте этот код в свой 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>

0
По вопросам рекламы [email protected]