# wp_unique_term_slug()

URL: https://chugunov.pro/api-wordpress/functions/wp_unique_term_slug/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.3.0.

## Сигнатура

```php
wp_unique_term_slug( string $slug, object $term ): string
```

## Описание

$slug должен быть уникальным глобально для каждой таксономии — то есть один термин таксономии не может иметь слаг, совпадающий со слагом другого термина таксономии. Каждый слаг должен быть глобально уникальным для всех таксономий.
Это работает так: если таксономия, которой принадлежит термин, иерархическая и имеет родителя, то этот родитель добавляется к $slug.
Если и после этого слаг не становится уникальным, то к нему добавляется число, пока не будет найдено действительно уникальное число.
Единственное назначение $term — добавление родителя, если он есть.

## Параметры

- `$slug` `string` — обязательный. Строка, которая будет проверена на уникальность слага.
- `$term` `object` — обязательный. Объект термина, которому будет принадлежать $slug.

## Возвращаемое значение

`string`

## Исходный код

Файл: `wp-includes/taxonomy.php:3105`

```php
function wp_unique_term_slug( $slug, $term ) {
	global $wpdb;

	$needs_suffix  = true;
	$original_slug = $slug;

	// As of 4.1, duplicate slugs are allowed as long as they're in different taxonomies.
	if ( ! term_exists( $slug ) || get_option( 'db_version' ) >= 30133 && ! get_term_by( 'slug', $slug, $term->taxonomy ) ) {
		$needs_suffix = false;
	}

	/*
	 * If the taxonomy supports hierarchy and the term has a parent, make the slug unique
	 * by incorporating parent slugs.
	 */
	$parent_suffix = '';
	if ( $needs_suffix && is_taxonomy_hierarchical( $term->taxonomy ) && ! empty( $term->parent ) ) {
		$the_parent = $term->parent;
		while ( ! empty( $the_parent ) ) {
			$parent_term = get_term( $the_parent, $term->taxonomy );
			if ( is_wp_error( $parent_term ) || empty( $parent_term ) ) {
				break;
			}
			$parent_suffix .= '-' . $parent_term->slug;
			if ( ! term_exists( $slug . $parent_suffix ) ) {
				break;
			}

			if ( empty( $parent_term->parent ) ) {
				break;
			}
			$the_parent = $parent_term->parent;
		}
	}

	// If we didn't get a unique slug, try appending a number to make it unique.

	/**
	 * Filters whether the proposed unique term slug is bad.
	 *
	 * @since 4.3.0
	 *
	 * @param bool   $needs_suffix Whether the slug needs to be made unique with a suffix.
	 * @param string $slug         The slug.
	 * @param object $term         Term object.
	 */
	if ( apply_filters( 'wp_unique_term_slug_is_bad_slug', $needs_suffix, $slug, $term ) ) {
		if ( $parent_suffix ) {
			$slug .= $parent_suffix;
		}

		if ( ! empty( $term->term_id ) ) {
			$query = $wpdb->prepare( "SELECT slug FROM $wpdb->terms WHERE slug = %s AND term_id != %d", $slug, $term->term_id );
		} else {
			$query = $wpdb->prepare( "SELECT slug FROM $wpdb->terms WHERE slug = %s", $slug );
		}

		if ( $wpdb->get_var( $query ) ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
			$num = 2;
			do {
				$alt_slug = $slug . "-$num";
				++$num;
				$slug_check = $wpdb->get_var( $wpdb->prepare( "SELECT slug FROM $wpdb->terms WHERE slug = %s", $alt_slug ) );
			} while ( $slug_check );
			$slug = $alt_slug;
		}
	}

	/**
	 * Filters the unique term slug.
	 *
	 * @since 4.3.0
	 *
	 * @param string $slug          Unique term slug.
	 * @param object $term          Term object.
	 * @param string $original_slug Slug originally passed to the function for testing.
	 */
	return apply_filters( 'wp_unique_term_slug', $slug, $term, $original_slug );
}
```

## История изменений

- 2.3.0 — Introduced.

## Связанные

Использует: [`term_exists`](https://chugunov.pro/api-wordpress/functions/term_exists/), [`get_term_by`](https://chugunov.pro/api-wordpress/functions/get_term_by/), [`is_taxonomy_hierarchical`](https://chugunov.pro/api-wordpress/functions/is_taxonomy_hierarchical/), [`get_term`](https://chugunov.pro/api-wordpress/functions/get_term/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`get_option`](https://chugunov.pro/api-wordpress/functions/get_option/), `wpdb::get_var`, `wpdb::prepare`, [`is_wp_error`](https://chugunov.pro/api-wordpress/functions/is_wp_error/).
Используется в: [`wp_update_term`](https://chugunov.pro/api-wordpress/functions/wp_update_term/), [`wp_insert_term`](https://chugunov.pro/api-wordpress/functions/wp_insert_term/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/wp_unique_term_slug/
