Функция wp_dropdown_categories()
в WordPress позволяет создать выпадающий список категорий, который может быть использован в формах или для навигации по категориям. Эта функция выводит HTML-код выпадающего списка, который может быть настроен с помощью множества параметров.
wp_dropdown_categories( array|string $args = '' ): string
Описание
Аргумент hierarchical
, который по умолчанию отключен, переопределит аргумент depth
, если он установлен в true
. При установке в false
будут отображаться все категории, а при включенном true
будет использоваться значение из аргумента depth
.
Параметры
- $args (array|string) (необязательный)
Массив или строка аргументов для генерации выпадающего списка категорий. Допустимые параметры:show_option_all
(string) — Текст для отображения всех категорий.show_option_none
(string) — Текст для отображения отсутствия категорий.option_none_value
(string) — Значение, используемое, когда категория не выбрана.orderby
(string) — Столбец для сортировки категорий. По умолчанию:'id'
.pad_counts
(bool) — См. описание аргумента вget_terms()
. По умолчанию:false
.show_count
(bool|int) — Включает количество постов. Принимает 0, 1 или их логические эквиваленты. По умолчанию: 0.echo
(bool|int) — Выводить или возвращать сгенерированный HTML. Принимает 0, 1 или их логические эквиваленты. По умолчанию: 1.hierarchical
(bool|int) — Перебирать иерархию таксономии. По умолчанию: 0.depth
(int) — Максимальная глубина. По умолчанию: 0.tab_index
(int) — Индекс вкладки для элемента select. По умолчанию: 0 (без tabindex).name
(string) — Значение для атрибута ‘name’ элемента select. По умолчанию: ‘cat’.id
(string) — Значение для атрибута ‘id’ элемента select. По умолчанию: значение$name
.class
(string) — Значение для атрибута ‘class’ элемента select. По умолчанию: ‘postform’.selected
(int|string) — Значение, которое должно быть выбрано. По умолчанию: 0.value_field
(string) — Поле термина, которое должно использоваться для заполнения атрибута ‘value’ элемента option. По умолчанию: ‘term_id’.taxonomy
(string|array) — Название таксономии или таксономий для извлечения. По умолчанию: ‘category’.hide_if_empty
(bool) — Пропустить генерацию разметки, если не найдено категорий. По умолчанию: false (создать элемент select даже при отсутствии категорий).required
(bool) — Должен ли элемент<select>
иметь атрибут HTML5 ‘required’. По умолчанию: false.walker
(Walker) — Объект Walker для формирования вывода. По умолчанию: используется экземплярWalker_CategoryDropdown
.aria_describedby
(string) — ‘id’ элемента, содержащего описательный текст для select.
Возврат
Функция возвращает строку HTML выпадающего списка категорий.
Пример 1: Выпадающий список категорий
Создайте выпадающий список категорий с текстом «Выберите категорию»:
<h2><?php _e( 'Посты по категориям', 'textdomain' ); ?></h2>
<?php wp_dropdown_categories( 'show_option_none=Выберите категорию' ); ?>
<script type="text/javascript">
var dropdown = document.getElementById("cat");
function onCatChange() {
if (dropdown.options[dropdown.selectedIndex].value > 0) {
location.href = "<?php echo esc_url(home_url('/')); ?>?cat=" + dropdown.options[dropdown.selectedIndex].value;
}
}
dropdown.onchange = onCatChange;
</script>
Пример 2: Игнорирование фильтра hide_empty
По умолчанию функция wp_dropdown_categories()
возвращает только категории, которые имеют посты. Чтобы это изменить, установите параметр hide_empty
в false
:
<?php wp_dropdown_categories( 'hide_empty=0' ); ?>
Пример 3: Использование формы с кнопкой
Вы можете использовать параметр echo=0
, чтобы сохранить вывод в переменной и затем использовать его в форме:
<h2><?php _e( 'Посты по категориям', 'textdomain' ); ?></h2>
<form id="category-select" class="category-select" action="<?php echo esc_url(home_url('/')); ?>" method="get">
<?php
$args = array(
'show_option_none' => __( 'Выберите категорию', 'textdomain' ),
'show_count' => 1,
'orderby' => 'name',
'echo' => 0,
);
?>
<?php $select = wp_dropdown_categories( $args ); ?>
<?php $replace = "<select$1 onchange='return this.form.submit()'>"; ?>
<?php $select = preg_replace( '#<select([^>]*)>#', $replace, $select ); ?>
<?php echo $select; ?>
<noscript>
<input type="submit" value="Просмотреть" />
</noscript>
</form>
Пример 4: Использование класса Walker
Вы также можете использовать класс Walker
для настройки вывода:
class Walker_custom_CategoryDropdown extends Walker_CategoryDropdown {
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 );
if ( isset( $args['value_field'] ) && isset( $category->{$args['value_field']} ) ) {
$value_field = $args['value_field'];
} else {
$value_field = 'term_id';
}
$output .= "\t<option class=\"level-$depth\" value=\"" . esc_attr( $category->{$value_field} ) . "\"";
if ( (string) $category->{$value_field} === (string) $args['selected'] )
$output .= ' selected="selected"';
$output .= '>' . $pad . $cat_name;
if ( $args['show_count'] )
$output .= ' ('. number_format_i18n( $category->count ) .')';
$output .= "</option>\n";
}
}
$cat_arg = array(
'taxonomy' => 'category',
'class' => 'form-control',
'value_field' => 'term_id',
'selected' => $taxonomy_id,
'orderby' => 'name',
'show_count' => 0,
'hierarchical' => true,
'hide_if_empty' => true,
'walker' => new Walker_custom_CategoryDropdown()
);
Пример 5: Переход на страницу тега
Добавление выбранного значения для страницы архива тегов:
<?php
$tag_slug = get_query_var('tag');
wp_dropdown_categories(array(
'taxonomy'=> 'post_tag',
'selected'=>$tag_slug,
'show_option_none'=> 'Выберите опцию',
'hide_empty' => 0,
'name' => 'listofoptions',
'value_field' => 'slug'
)); ?>
<script>
document.getElementById('listofoptions').onchange = function() {
window.location = '/tag/' + this.value;
}
</script>
Заключение
Функция wp_dropdown_categories()
является удобным способом для создания выпадающего списка категорий в WordPress. Она позволяет настраивать множество параметров, что делает её гибким инструментом для разработки. Используйте её для улучшения навигации на вашем сайте и предоставления пользователям удобных возможностей выбора.