term_exists()
Проверяет существует ли указанный элемент таксономии (раздел). Если существует, возвращает ID или массив данных этого элемента.
C WP 6.0. функция работает с кэшем и использует get_terms().
До WP 6.0. Эта функция выполняет запрос к базе данных. get_term_by() может быть использована для той же цели, за исключением того, что она использует кэш.
Хуки из функции
Возвращает
Разное
.
-
Строку
— term_id в виде строки — когда таксономия не указана и термин найден. Пр:term_exists( 395 ) > string(3) "395"
. -
Массив
— когда таксономия указана и термин найден:[ 'term_id' => 'term id', 'term_taxonomy_id' => 'taxonomy id' ]
-
null
— когда термина не существует. 0
— когда в функцию указан 0 вместо ID термина.
Использование
term_exists( $term, $taxonomy, $parent );
- $term(строка/число) (обязательный)
Термин, который нужно проверить. Можно указывать название, альтернативное название (slug) или ID.
Если указывается ID, то значение должно быть типа "число", а не "строка" в виде числа. Например
12
а не'12'
.- $taxonomy(строка)
- Название таксономии с которой будет работать функция. Указывать не обязательно.
По умолчанию: '' - $parent(строка/число)
- ID родительского раздела, под которым предполагается искать указанный элемент таксономии.
По умолчанию: null
Примеры
#1 Проверка, существует ли термин (в любой таксономии)
$term = term_exists( 'miscellaneous' ); // вернет ID элемента таксономии со slug-ом 'miscellaneous' $term = term_exists( 'Мужская одежда' ); // вернет ID элемента таксономии с названием 'Мужская одежда'
#2 Проверка, существует ли термин (в указанной таксономии)
Проверка, существует ли термин таксономии my_tax:
$term = term_exists( 'Мужская одежда', 'my_tax' ); // Вернет массив // [term_id] => 80 // [term_taxonomy_id] => 84 // ID элемента таксономии echo $term['term_id']; // ID элемента таксономии в структуре таксономий echo $term['term_taxonomy_id'];
Проверка существования категории Uncategorized
:
$term = term_exists( 'Uncategorized', 'category' ); if ( $term !== 0 && $term !== null ) { echo 'Uncategorized category exists!'; }
#3 С WP 6.0 term_exists() кэшируется
Поэтому для кода который использует эту функцию необходимо убедиться, что term_exists() получает некэшированный результат, есть два способа сделать это:
1) Используя новый фильтр term_exists_default_query_args:
$callback = function ( $args ) { $args['cache_domain'] = microtime(); }; add_filter( 'term_exists_default_query_args', $callback ); $check = term_exists( 123, 'category' ); remove_filter( 'term_exists_default_query_args', $callback );
2) Использование wp_suspend_cache_invalidation():
wp_suspend_cache_invalidation( true ); $check = term_exists( 123, 'category' ); wp_suspend_cache_invalidation( false );
Подробнее читайте здесь: https://make.wordpress.org/core/2022/04/28/taxonomy-performance-improvements-in-wordpress-6-0/
Заметки
- Global. true|false. $_wp_suspend_cache_invalidation
Список изменений
С версии 3.0.0 | Введена. |
С версии 6.0.0 | Converted to use get_terms(). |