Intereting Posts
Woocommerce: как переопределить основные функции в functions.php? quicktags "link" кнопка не работает, но все остальные кнопки делают используя wp_remote_get для получения собственного URL-адреса на локальном хосте Список всех пользователей на основе массива доменов Добавить новый тег, основанный на названии категории в событии публикации Являются ли частные сообщения видимыми для поисковых систем? Как я могу работать с базой данных рядом с клиентом? Echo custom post meta из массива опций Получение сообщений, содержащих мета-ключ с особой стоимостью Загрузка пользовательского языкового файла для плагина Основная проблема слайд-шоу Skt Функция для добавления класса в элемент <form>? после выхода из системы get_current_user_id все еще сохраняет значение Клонирование и изменение каталога продуктов Woocommerce Более эффективный способ размещения сообщений по категориям

У меня есть term_taxonomy_id – есть ли API-вызов для получения таксономии?

Проблема : У меня есть term_taxonomy_id, у меня нет имени таксономии, я хочу получить объект term без прямого запроса к базе данных.

Мысли: Ну, API docs для get_term_by говорят, что таксономия требуется, и схема таблицы wp_term_taxonomy делает ее довольно простой для получения таксономии, если у меня есть term_taxonomy_id, поэтому это должно быть довольно просто – однако я, похоже, не вижу никаких вызовов API что может достичь этого.

Я мог бы просто вызвать базу данных, используя что-то вроде:

select taxonomy from wp_term_taxonomy where term_taxonomy_id={ID} 

Но предпочел бы не делать прямого запроса к базе данных. Есть ли вызов API, который может это сделать? или лучший способ получить объект term из term_taxonomy_id?

благодаря

Я был в этом уверен, но ответ – по крайней мере на данный момент – окончательный нет. Для него нет API-запроса.

Чтобы дважды проверить, я попросил основного разработчика Andrew Nacin об этом в Twitter . Его ответ:

term_taxonomy_id на данный момент, по сути, является частным. Вероятно, у вас не должно быть этого.

Возможно, стоит задать второй вопрос о том, что вы делаете, или, по крайней мере, расширить конкретную ситуацию, которая ведет к этому сценарию, поскольку ваша текущая проблема довольно редка и, возможно, ненужная – в первую очередь. Опять из Нацина:

Я, честно говоря, не знаю, когда вы когда-либо имеете term_taxonomy_id, а также не можете уже знать term_id и таксономию.


Добавление: Следует также отметить, что схема таксономии и мета-отношения планируется претерпеть некоторые изменения , поэтому это может быть особенно опасное время, чтобы попробовать что-то вне API.

@mrwweb дал правильный ответ здесь, я думаю, и вы должны рассмотреть его возражения.

Но если вы хотите эту функциональность, вам нужно реализовать API-вызов самостоятельно. Который, как вы сказали, довольно легко сделать:

 // create your own API call function get_taxonomy_by_term_taxonomy_id( $term_taxonomy_id = '' ) { global $wpdb; if ( empty( $term_taxonomy_id ) ) { return false; } $taxonomy = $wpdb->get_row( $wpdb->prepare( "SELECT taxonomy FROM $wpdb->term_taxonomy WHERE term_taxonomy_id = %d LIMIT 1", $term_taxonomy_id ) ); return $taxonomy; } 

Если вы думаете об использовании перехватчиков – get_term и get_$taxonomy – доступны внутри функции get_term_by() , это не стоит того, потому что вам придется делать второй запрос базы данных таким образом.

РЕДАКТИРОВАТЬ Только заметил оригинальный вопрос, заданный для таксономии, а не термин.

Идти оставить это здесь, если это поможет кому-то в будущем, хотя

Вот мое домашнее решение. Просто вставьте это в свой файл functions.php …

 if( ! function_exists('get_term_by_term_taxonomy_id') ) { function get_term_by_term_taxonomy_id( $term_taxonomy_id = null ) { global $wpdb; $res = $wpdb->get_row( $wpdb->prepare( 'select term_id, taxonomy from {$wpdb->prefix}_term_taxonomy where term_taxonomy_id = %d', (int) $term_taxonomy_id ) ); if( is_wp_error($res) ) return false; return get_term_by('id', $res->term_id, $res->taxonomy); } } 

Это решение менее эффективно, чем исходный SQL, но оно поддерживает общедоступные вызовы API:

 private function term_by_term_taxonomy_id($term_taxonomy_id) { $taxonomies = get_taxonomies(); foreach ($taxonomies as $taxonomy) { $term = get_term_by('term_taxonomy_id', $term_taxonomy_id, $taxonomy); if ($term) { return $term; } } return null; }