wp_dropdown_categories

Выводит на экран выпадающий список категорий (рубрик). Имеет множество настроек. Вместо рубрик можно указать название произвольной таксономии.

Хуки из функции:
list_cats
wp_dropdown_cats
Возвращает

HTML код выпадающего списка категорий (<select>).

Использование

wp_dropdown_categories( $args );
Шаблон использования
$args = array(
	'show_option_all'    => '',
	'show_option_none'   => '',
	'orderby'            => 'ID',
	'order'              => 'ASC',
	'show_last_update'   => 0,
	'show_count'         => 0,
	'hide_empty'         => 1,
	'child_of'           => 0,
	'exclude'            => '',
	'echo'               => 1,
	'selected'           => 0,
	'hierarchical'       => 0,
	'name'               => 'cat',
	'id'                 => 'name',
	'class'              => 'postform',
	'depth'              => 0,
	'tab_index'          => 0,
	'taxonomy'           => 'category',
	'hide_if_empty'      => false,
	'value_field'        => 'term_id', // значение value e option
	'required'           => false,
); 

wp_dropdown_categories( $args );
$args(строка/массив)
Массив аргументов которые нужно изменить. Можно указать как строку запроса.
По умолчанию: массив аргументов по умолчанию

Аргументы параметра $args

Кроме этих параметров можно указать еще и от функции get_terms().
show_option_all(строка)
Текст для показа всех категорий. Будет начальным текстом в списке.
По умолчанию: ”
show_option_none(строка/массив)
Текст для показа пункта списка “без категорий”. Будет начальным текстом в списке или вторым, если установлен параметр show_option_all.
По умолчанию: ”
orderby(строка)

Сортировка списка по определенным критериям. Например по количеству постов в каждой категории или по названию категорий. Доступны следующие критерии:

  • ID – сортировка по ID;
  • name – сортировка по названию (по умолчанию);
  • slug – сортировка по алт. имени (slug);
  • count – по количеству записей в категории;
  • term_group – по группе.
    По умолчанию: ‘ID’
order(строка/массив)

Направление сортировки:

  • ASC – по порядку, от меньшего к большему (1, 2, 3; a, b, c);
  • DESC – в обратном порядке, от большего к меньшему (3, 2, 1; c, b, a).
    По умолчанию: ‘ASC’
show_last_update(строка/массив)
Показать последнее обновление категории 1 – да, 0 – нет (у меня при изменении параметра ничего не поменялось).
По умолчанию: false
show_count(логический)

Показывать (1) или нет (0) количество записей в категории. Число записей будет показано после названия категории в скобках (например, Психология (16)).

  • 1 (true) – показывать количество записей;
  • 0 (false) – не показывать количество записей.
hide_empty(Логический)

Показывать (0) или нет (1) категории не имеющие записей (пустые категории).

  • 0 (true) – показывать пустые;
  • 1 (false) – не показывать пустые категории.
    По умолчанию: 1
child_of(строка/массив)
Показать дочерние категории. В параметре указывается ID родительской категории (категория, вложенные категории которой нужно показать).
По умолчанию: ”
exclude(строка/число)
ID категорий, которые нужно исключить. Указывать через запятую.
По умолчанию: ”
exclude_tree(строка/массив)
ID родительской категории, дерево которой не нужно показывать. Дерево категории – это категория и все в нее вложенные категории.
echo(логический)
1 – выводить результат на экран. 0 – возвращать для обработки.
По умолчанию: 1
depth(число)
Глубина вложенности дочерних категорий. Игнорируется если параметр hierarchical отключен.
По умолчанию: 0/flase
tab_index(строка)
Значение атрибута tabindex у HTML тега <select>
name(строка)
Значение атрибута name у HTML тега <select>
По умолчанию: cat
id(строка)
Значение атрибута ID у тега <select>
По умолчанию: как у name
class(строка)
Атрибут class для select элемента.
По умолчанию: ‘postform’
selected(число)
ID категории, которая должна быть выделена. По умолчанию: по умолчанию выставляется ID просматриваемой категории, если юзер на странице категории.
hierarchical(логический)
Выводить категории в виде дерева. 1 – да, показать как дерево, 0 – вывести сплошным списком.
pad_counts(логический)
Подсчитывать количество постов для родительских категорий, как сумма всех постов во вложенных категориях. Если параметры show_counts и hierarchical включены, этот параметр включается автоматически (становится true).
По умолчанию: false
taxonomy(строка)
Название таксономии с которой будет работать функция.
По умолчанию: ‘category’
hide_if_empty(логический)
Прятать выпадающий список если вернулся пустой результат? true – да, не показывать список, если нет категорий. false – показывать пустой список.
По умолчанию: false
value_field(строка)

Поле термина, которое будет выводиться в value у <option>. Может быть:

  • term_id
  • name
  • slug
  • term_group
  • term_taxonomy_id
  • taxonomy
  • description
  • parent
  • count ( c версии WP 4.2 )

По умолчанию: ‘term_id’

required(логический)
Добавлять ли к <select> атрибут HTML5 ‘required’. С версии 4.6.
По умолчанию: false

Примеры

#1 Выпадающий список с кнопкой Submit

Пример вывода выпадающего списка категорий с кнопкой сабмита:

<h2>Категории:</h2>
<form action="<?php bloginfo('url'); ?>" method="get">
	<?php wp_dropdown_categories('show_count=1&hierarchical=1'); ?>
	<input type="submit" name="submit" value="view" />
</form>

#2 Выпадающий список с использованием Javascript (без кнопки Сабмита)

Пример, демонстрирующий использование аргумента show_option_none:

<h2>Категории:</h2>
	<?php wp_dropdown_categories('show_option_none=Select category'); ?>

<script>
	var dropdown = document.getElementById("cat");
	function onCatChange() {
		if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
			location.href = "<?php echo get_option('home');
?>/?cat="+dropdown.options[dropdown.selectedIndex].value;
		}
	}
	dropdown.onchange = onCatChange;
</script>

#2.1. Выпадающий список с использованием Javascript (2) (без кнопки Сабмита)

<h2><?php _e('Posts by Category'); ?></h2>
	<form action="<?php bloginfo('url'); ?>/" method="get">
	<div>
<?php
$select = wp_dropdown_categories('show_option_none=Select category&show_count=1&orderby=name&echo=0');
$select = preg_replace("#<select([^>]*)>#", "<select$1 onchange='return this.form.submit()'>", $select);
echo $select;
?>
	<noscript><div><input type="submit" value="View" /></div></noscript>
	</div></form>

Код из


wp-includes/category-template.php

WP 4.7.2

<?php
function wp_dropdown_categories( $args = '' ) {
	$defaults = array(
		'show_option_all'   => '',
		'show_option_none'  => '',
		'orderby'           => 'id',
		'order'             => 'ASC',
		'show_count'        => 0,
		'hide_empty'        => 1,
		'child_of'          => 0,
		'exclude'           => '',
		'echo'              => 1,
		'selected'          => 0,
		'hierarchical'      => 0,
		'name'              => 'cat',
		'id'                => '',
		'class'             => 'postform',
		'depth'             => 0,
		'tab_index'         => 0,
		'taxonomy'          => 'category',
		'hide_if_empty'     => false,
		'option_none_value' => -1,
		'value_field'       => 'term_id',
		'required'          => false,
	);

	$defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;

	// Back compat.
	if ( isset( $args['type'] ) && 'link' == $args['type'] ) {
		/* translators: 1: "type => link", 2: "taxonomy => link_category" alternative */
		_deprecated_argument( __FUNCTION__, '3.0.0',
			sprintf( __( '%1$s is deprecated. Use %2$s instead.' ),
				'<code>type => link</code>',
				'<code>taxonomy => link_category</code>'
			)
		);
		$args['taxonomy'] = 'link_category';
	}

	$r = wp_parse_args( $args, $defaults );
	$option_none_value = $r['option_none_value'];

	if ( ! isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) {
		$r['pad_counts'] = true;
	}

	$tab_index = $r['tab_index'];

	$tab_index_attribute = '';
	if ( (int) $tab_index > 0 ) {
		$tab_index_attribute = " tabindex="$tab_index"";
	}

	// Avoid clashes with the 'name' param of get_terms().
	$get_terms_args = $r;
	unset( $get_terms_args['name'] );
	$categories = get_terms( $r['taxonomy'], $get_terms_args );

	$name = esc_attr( $r['name'] );
	$class = esc_attr( $r['class'] );
	$id = $r['id'] ? esc_attr( $r['id'] ) : $name;
	$required = $r['required'] ? 'required' : '';

	if ( ! $r['hide_if_empty'] || ! empty( $categories ) ) {
		$output = "<select $required name='$name' id='$id' class='$class' $tab_index_attribute>n";
	} else {
		$output = '';
	}
	if ( empty( $categories ) && ! $r['hide_if_empty'] && ! empty( $r['show_option_none'] ) ) {

		/**
		 * Filters a taxonomy drop-down display element.
		 *
		 * A variety of taxonomy drop-down display elements can be modified
		 * just prior to display via this filter. Filterable arguments include
		 * 'show_option_none', 'show_option_all', and various forms of the
		 * term name.
		 *
		 * @since 1.2.0
		 *
		 * @see wp_dropdown_categories()
		 *
		 * @param string $element Taxonomy element to list.
		 */
		$show_option_none = apply_filters( 'list_cats', $r['show_option_none'] );
		$output .= "t<option value='" . esc_attr( $option_none_value ) . "' selected='selected'>$show_option_none</option>n";
	}

	if ( ! empty( $categories ) ) {

		if ( $r['show_option_all'] ) {

			/** This filter is documented in wp-includes/category-template.php */
			$show_option_all = apply_filters( 'list_cats', $r['show_option_all'] );
			$selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : '';
			$output .= "t<option value='0'$selected>$show_option_all</option>n";
		}

		if ( $r['show_option_none'] ) {

			/** This filter is documented in wp-includes/category-template.php */
			$show_option_none = apply_filters( 'list_cats', $r['show_option_none'] );
			$selected = selected( $option_none_value, $r['selected'], false );
			$output .= "t<option value='" . esc_attr( $option_none_value ) . "'$selected>$show_option_none</option>n";
		}

		if ( $r['hierarchical'] ) {
			$depth = $r['depth'];  // Walk the full depth.
		} else {
			$depth = -1; // Flat.
		}
		$output .= walk_category_dropdown_tree( $categories, $depth, $r );
	}

	if ( ! $r['hide_if_empty'] || ! empty( $categories ) ) {
		$output .= "</select>n";
	}
	/**
	 * Filters the taxonomy drop-down output.
	 *
	 * @since 2.1.0
	 *
	 * @param string $output HTML output.
	 * @param array  $r      Arguments used to build the drop-down.
	 */
	$output = apply_filters( 'wp_dropdown_cats', $output, $r );

	if ( $r['echo'] ) {
		echo $output;
	}
	return $output;
}