Кажется, что term_exists()
возвращает NULL для уже существующего термина:
$name = "כל האזורים" $taxonomy_name = "geographictermsisrael" $args = array("slug" => "everything", "parent" => 0) var_dump(term_exists($name, $taxonomy_name, $args)); // Returns NULL (not 0) if ( !term_exists($name, $taxonomy_name, $args) ) { $foo = wp_insert_term($name, $taxonomy_name, $args); var_dump($foo); // Returns the array below } object(WP_Error)#4193 (2) { ["errors"]=> array(1) { ["term_exists"]=> array(1) { [0]=> string(77) "השם או מזהה הכתובת כבר קיימים עם ההורה הזה." } } ["error_data"]=> array(1) { ["term_exists"]=> string(3) "699" } }
Если этот термин уже существует, почему term_exists()
возвращает NULL? Это выглядит так:
mysql> select * from wp_term_taxonomy where taxonomy='geographictermsisrael'; +------------------+---------+-----------------------+-------------+--------+-------+ | term_taxonomy_id | term_id | taxonomy | description | parent | count | +------------------+---------+-----------------------+-------------+--------+-------+ | 738 | 699 | geographictermsisrael | | 0 | 0 | +------------------+---------+-----------------------+-------------+--------+-------+ 1 row in set (0.00 sec) mysql> select * from wp_terms where term_id=699; +---------+---------------------+------------+------------+ | term_id | name | slug | term_group | +---------+---------------------+------------+------------+ | 699 | כל האזורים | everything | 0 | +---------+---------------------+------------+------------+ 1 row in set (0.00 sec) mysql> select * from wp_term_relationships where term_taxonomy_id=738; Empty set (0.00 sec)
Третий аргумент для term_exists()
– целое число, а не массив.
параметры
- $ термин
- ( integer | string ) ( обязательно ) Термин для проверки
- По умолчанию: нет
- $ таксономия
- ( строка ) ( необязательно ) Имя таксономии для использования
- По умолчанию: ''
- $ родитель
- ( целое число ) ( необязательно ) $ parent ID родительского термина, под которым ограничивается поиск поиска
- По умолчанию: 0
Передайте правильные аргументы, и он работает.
var_dump(term_exists($name, $taxonomy_name));
0
по умолчанию, поэтому вам не нужно указывать его.