term_exists() WP 3.0
Проверяет существует ли указанный элемент таксономии (раздел). Если существует, возвращает ID или массив идентификаторов этого элемента.
1 раз — 0.000419 сек (быстро) | 50000 раз — 14.74 сек (медленно) | PHP 7.0.14, WP 4.7
Хуков нет.
Возвращает
null/число/массив
-
ID элемента таксономии - если таксономия не указана и термин найден.
-
Массив, если таксономия указана и термин найден:
[ 'term_id'=> 'term id', 'term_taxonomy_id'=> 'taxonomy id' ]
- 0/false - если термина не существует.
Использование
term_exists( $term, $taxonomy, $parent );
- $term(строка/число) (обязательный)
- Элемент, который нужно проверить. Можно указывать название, альтернативное название (slug) или ID.
По умолчанию: нет
- $taxonomy(строка)
- Название таксономии с которой будет работать функция. Указывать не обязательно.
По умолчанию: ''
- $parent(строка/число)
- ID родительского раздела, под которым предполагается искать указанный элемент таксономии.
По умолчанию: ''
Примеры
#1 Различные примеры использования функции:
$term = term_exists( 'miscellaneous' );
// вернет ID элемента таксономии со slug-ом 'miscellaneous'
$term = term_exists( 'Мужская одежда' );
// вернет ID элемента таксономии с названием 'Мужская одежда'
#1.1 С указанием таксономии:
$term = term_exists( 'Мужская одежда', 'my_tax' );
// Вернет массив
// [term_id] => 80
// [term_taxonomy_id] => 84
// ID элемента таксономии
echo $term['term_id'];
// ID элемента таксономии в структуре таксономий
echo $term['term_taxonomy_id'];
Заметки
- Global. wpdb. $wpdb WordPress database abstraction object.
Список изменений
Код term_exists() term exists
WP 5.6.2
<?php
function term_exists( $term, $taxonomy = '', $parent = null ) {
global $wpdb;
$select = "SELECT term_id FROM $wpdb->terms as t WHERE ";
$tax_select = "SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE ";
if ( is_int( $term ) ) {
if ( 0 === $term ) {
return 0;
}
$where = 't.term_id = %d';
if ( ! empty( $taxonomy ) ) {
// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.ReplacementsWrongNumber
return $wpdb->get_row( $wpdb->prepare( $tax_select . $where . ' AND tt.taxonomy = %s', $term, $taxonomy ), ARRAY_A );
} else {
return $wpdb->get_var( $wpdb->prepare( $select . $where, $term ) );
}
}
$term = trim( wp_unslash( $term ) );
$slug = sanitize_title( $term );
$where = 't.slug = %s';
$else_where = 't.name = %s';
$where_fields = array( $slug );
$else_where_fields = array( $term );
$orderby = 'ORDER BY t.term_id ASC';
$limit = 'LIMIT 1';
if ( ! empty( $taxonomy ) ) {
if ( is_numeric( $parent ) ) {
$parent = (int) $parent;
$where_fields[] = $parent;
$else_where_fields[] = $parent;
$where .= ' AND tt.parent = %d';
$else_where .= ' AND tt.parent = %d';
}
$where_fields[] = $taxonomy;
$else_where_fields[] = $taxonomy;
$result = $wpdb->get_row( $wpdb->prepare( "SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $where AND tt.taxonomy = %s $orderby $limit", $where_fields ), ARRAY_A );
if ( $result ) {
return $result;
}
return $wpdb->get_row( $wpdb->prepare( "SELECT tt.term_id, tt.term_taxonomy_id FROM $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy as tt ON tt.term_id = t.term_id WHERE $else_where AND tt.taxonomy = %s $orderby $limit", $else_where_fields ), ARRAY_A );
}
// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
$result = $wpdb->get_var( $wpdb->prepare( "SELECT term_id FROM $wpdb->terms as t WHERE $where $orderby $limit", $where_fields ) );
if ( $result ) {
return $result;
}
// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
return $wpdb->get_var( $wpdb->prepare( "SELECT term_id FROM $wpdb->terms as t WHERE $else_where $orderby $limit", $else_where_fields ) );
}
Cвязанные функции