get_categories() WP 2.1.0

Отримує категорії у вигляді масиву об’єктів.

За якими критеріями одержати категорії та як їх відсортувати вказується у параметрах функції.

Параметри цієї функції дуже схожі на параметри wp_list_categories() . Вони можуть бути передані як масиву чи рядка запита: type=post&order=DESC.

Працює на основі:
get_terms()
Основа для:
wp_list_categories()
1 раз – 0.005625 сек
(дуже повільно) | 50000 разів – 11.98 сек
(повільно) |
PHP 7.1.11, WP 4.9.5

Хуки з функції

Повертає

Массив.

  • Масив об’єктів WP_Term (категорій).
  • Порожній масив, якщо не вдалося одержати категорії.
Array
(
	[0] => WP_Term Object
		(
			[term_id] => 7
			[name] => Codex
			[slug] => codex
			[term_group] => 0
			[term_taxonomy_id] => 7
			[taxonomy] => category
			[description] =>
			[parent] => 3
			[count] => 17
			[filter] => raw
			[term_order] => 1
			[cat_ID] => 7
			[category_count] => 17
			[category_description] =>
			[cat_name] => Codex
			[category_nicename] => codex
			[category_parent] => 3
		)

	[1] => WP_Term Object ( ... )
	...
)

Шаблон використання

$categories = get_categories( [
	'taxonomy' => 'category',
	'type' => 'post',
	'child_of' => 0,
	'parent' => '',
	'orderby' => 'name',
	'order' => 'ASC',
	'hide_empty' => 1,
	'hierarchical' => 1,
	'exclude' => '',
	'include' => '',
	'number' => 0,
	'pad_counts' => false,
	// повний список параметрів дивіться в описі функції http://wp-kama.ru/function/get_terms
]);

if( $categories ){
	foreach( $categories as $cat ){
		// Дані в об'єкті $cat

		// $cat->term_id
		// $cat->name (Рубрика 1)
		// $cat->slug (rubrika-1)
		// $cat->term_group (0)
		// $cat->term_taxonomy_id (4)
		// $cat->taxonomy (category)
		// $cat->description (Текст опису)
		// $cat->parent (0)
		// $cat->count (14)
		// $cat->object_id (2743)
		// $cat->cat_ID (4)
		// $cat->category_count (14)
		// $cat->category_description (Текст опису)
		// $cat->cat_name (Рубрика 1)
		// $cat->category_nicename (rubrika-1)
		// $cat->category_parent (0)

	}
}

Використання

$categories = get_categories( $args );
$args
(масив|рядок)
Установки для отримання категорій.


За замовчуванням: ” – попереднє встановлення

Аргументи $args

Повний список параметрів дивіться у get_terms() .

taxonomy
(рядок)
Назву таксономії, яку потрібно обробляти. Додано з версії 3.0.


Типово: ‘category’
type
(рядок)

Тип категорій, які будуть одержані.

  • post– категорії для постів (за замовчуванням);
  • link– Розділи посилань.
    Типово: “post”
child_of
(рядок)
Отримати дочірні категорії (включаючи всі рівні вкладеності) зазначеної категорії. У параметрі вказується ID батьківської категорії (категорія, вкладені категорії якої потрібно показати).
parent
(число)
Отримує категорії, батьківська категорія яких зазначена у цьому параметрі. На відміну від
child_ofтого, що буде показаний один (тільки перший) рівень вкладеності.


За замовчуванням: ”
orderby
(рядок)

Сортування даних за певними критеріями. Наприклад, за кількістю постів у кожній категорії чи за назвою категорій. Доступні такі критерії:

  • idабо term_id– за ID.
  • name– За назвою. За замовчуванням.
  • count– за полем count у term_taxonomy – за кількістю записів.
  • slug– за альтернативною назвою.
  • description– За описом.
  • term_group– по групі.
  • term_group– по групі.
  • parent– По полю parent.

  • include– По порядку вказаному в параметрі $include
  • slug__in– З версії 4.9. У порядку вказаному у параметрі $ slug.
  • meta_value– за значенням довільного поля
  • meta_value_num– за значенням довільного поля, значення інтерпретуватиметься як число, а не рядок.
  • ключ "meta_query"– у параметрі $meta_query ми можемо вказати параметри запиту за метаполями, і там-таки вказати ключ для конкретного запиту. Цей ключ можна використовувати як ключ для сортування за відповідним метаполем.
  • none– не сортувати

Типово: “name”

order
(рядок)

Напрямок сортування, вказаного у параметрі “orderby”:

  • ASC– По порядку, від меншого до більшого (1, 2, 3; a, b, c);
  • DESC– у зворотному порядку, від більшого до меншого (3, 2, 1; c, b, a).

Типово: “ASC”

hide_empty
(логічний)

Отримувати чи ні порожні категорії (що не мають записів):

  • 1(true) – не одержувати порожні,
  • 0(False) – отримувати порожні.

Типово: true

hierarchical
(логічний)
Якщо параметр встановлено в
true , то результат буде включено порожні дочірні категорії, дочірні категорії яких мають записи (непусті).


Типово: true
exclude
(рядок/масив)
Виключити будь-які категорії зі списку. Потрібно вказувати ID категорій через кому або в масиві. Якщо цей параметр вказано, параметр
child_of буде скасовано.


За замовчуванням: ”
include
(рядок/масив)
Вивести списком лише зазначені категорії. Вказувати потрібно ID категорій через кому або в масиві.


За замовчуванням: ”
number
(число)
Ліміт. Число категорій, які будуть одержані. За замовчуванням без обмежень будуть отримані всі категорії.
pad_counts
(логічний)
Якщо передати true, то число, яке показує кількість записів у батьківських категоріях, буде сумою своїх записів та записів з дочірніх категорій.


Типово: false

Приклади

0

#1 Список категорій та їх опис

Цей приклад покаже нам як можна вивести списком посилання на категорії, де відразу після кожного посилання буде йти опис категорії (вказується під час створення/редагування категорії):

<?php
$categories = get_categories( [
	'orderby' => 'name',
	'order' => 'ASC'
]);

foreach( $categories as $category ){
	echo '<p>Category: <a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $category->name ) . '' ' . '>'. $category->name.'</a> </p> ';
	echo '<p> Description:'. $category->description . '</p>';
	echo '<p> Post Count: '. (int) $category->count . '</p>';
}
?>
0

#2 Отримання лише категорій верхнього рівня

Для цього встановіть значення 'parent' => 0. Цей приклад отримує посилання та назву категорій верхнього рівня.

$cats = get_categories( array(
	'orderby' => 'name',
	'parent' => 0
)));

foreach ( $cats as $cat ) {

	printf( '<a href="%1$s">%2$s</a><br />',
		esc_url( get_category_link( $cat->term_id ) ),
		esc_html( $cat->name )
	);
}
0

#3 Випадаючий список

Для того, щоб створити список, що випадає з категорій, ми можемо скористатися іншою спеціальною для цієї мети, функцією wp_dropdown_categories() :

wp_dropdown_categories([
	'hide_empty' => 0,
	'name' => 'category_parent',
	'orderby' => 'name',
	'selected' => $category->parent,
	'hierarchical' => true,
	'show_option_none' => __('None')
]);

Однак з таким підходом ми втратимо певну гнучкість у налаштуванні списку, оскільки ми отримаємо вже повністю сформований список.

Тому, в деяких випадках буде логічніше створити список, що випадає, за допомогою цієї функції – get_categories(). Приклад (передбачається, що нам потрібно вивести підкатегорії (дочірні) категорії 10):

<select name="event-dropdown" onchange="document.location.href = this.options[ this.selectedIndex ].value;">

	<option value=""><?php echo esc_attr( 'Виберіть подію' ); ?></option>

	<?php
	$categories = get_categories( 'child_of=10');

	foreach( $categories as $category ){

		$option = '<option value="' . get_term_link( $category ) . '">';
		$option .= $category->name;
		$option .= ' (' . $category->count . ')';
		$option .= '</option>';

		echo $ option;
	}
	?>

</select>
-1

#4 Отримаємо тільки категорії, в яких є пости

За промовчанням функція get_category() повертає ТІЛЬКИ категорії, в яких є посади (не пусті категорії). Це означає, що якщо для категорії не призначено посту, то така категорія не буде отримана.

Щоб цього уникнути і показати всі категорії незалежно чи є в ній пости чи ні, потрібно вказати параметр 'hide_empty' => false:

$ args = array (
	'hide_empty' => false,
);

$cats = get_categories( $args ); // поверне всі категорії (включаючи порожні)

нотатки

  • Дивіться: get_terms() Type of arguments that can be changed.

список змін

З версії 2.1.0Введено.

Код get_categories() WP 6.0.2

function get_categories( $args = '' ) {
	$defaults = array( 'taxonomy' => 'category' );
	$ args = wp_parse_args ($ args, $ defaults);

	/**
	 * Filters taxonomy використовувалися для відновлення термінів, коли calling get_categories().
	 *
	 * @ Since 2.7.0
	 *
	 * @param string $taxonomy Taxonomy to retrieve terms from.
	 * @param array $args An array of arguments. See get_terms().
	 */
	$args['taxonomy'] = apply_filters( 'get_categories_taxonomy', $args['taxonomy'], $args );

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

	$categories = get_terms( $args );

	if ( is_wp_error( $categories ) ) {
		$categories = array();
	} else {
		$categories = (array) $categories;
		foreach ( array_keys( $categories ) as $k ) {
			_make_cat_compat( $categories[ $k ] );
		}
	}

	return $categories;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *