term_exists()
Перевіряє, чи існує вказаний елемент таксономії (розділ). Якщо є, повертає ID або масив даних цього елемента.
З WP 6.0. функція працює з кешем та використовує get_terms() .
До WP 6.0. Ця функція виконує запит до бази даних. get_term_by() може бути використана для тієї ж мети, за винятком того, що вона використовує кеш.
(швидко) | 50000 разів – 14.74 сек
(повільно) |
PHP 7.0.14, WP 4.7
Хуки з функції
Повертає
Разное
.
Строку
– 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() . |