Как получить все таксономии для типа записи?

21 июн. 2011 г., 12:20:04
Просмотры: 105K
Голосов: 60

Как получить таксономии для типа записи?

Если у меня есть тип записи event и мне нужно узнать список таксономий, которые прикреплены к этому типу записи. Как мне их найти?

0
Все ответы на вопрос 7
7
53

Кажется, я разобрался! Изучив несколько функций в файле taxonomy.php WordPress, я обнаружил функцию get_object_taxonomies();, которая решила мою проблему :)

21 июн. 2011 г. 16:06:39
Комментарии

Смотрите подробнее здесь: http://codex.wordpress.org/Function_Reference/get_object_taxonomies

Manny Fleurmond Manny Fleurmond
21 июн. 2011 г. 16:15:42

Вау... полезно знать про get_object_taxonomies(). Это помогло мне перехватить template_redirect

helgatheviking helgatheviking
10 нояб. 2011 г. 05:17:40

Привет, спасибо за это, но как отсортировать их по ID вместо NAME?

dh47 dh47
19 окт. 2015 г. 10:08:28

Самый простой способ — просто отсортировать их с помощью цикла for или foreach.

Sisir Sisir
19 окт. 2015 г. 12:25:54

Да, я получаю данные с помощью цикла foreach, но они упорядочены по имени `$taxonomies = get_object_taxonomies( array( 'post_type' => $post_type ) );

foreach( $taxonomies as $taxonomy ) :

// Получаем все "категории" (термины) в этой таксономии для получения соответствующих записей
$terms = get_terms( $taxonomy ); ?>

<ul class="specials"><?php foreach( $terms as $term ) : ?>

  <li><h2><?php echo $term->name; ?></h2>`
dh47 dh47
19 окт. 2015 г. 13:19:44

@dh47 Я опоздал к обсуждению, но если тебе все еще интересно, думаю, тебе нужно использовать два цикла foreach: один для сортировки, а другой для отображения. Также можно передать их в usort перед циклом foreach, чтобы отсортировать их как угодно.

phatskat phatskat
7 февр. 2019 г. 06:46:33

Вот однострочник для отображения всех терминов для заданного объекта $post (любого типа записи): array_map(function ($taxonomy) use($post) { return wp_get_post_terms($post->ID, $taxonomy); }, get_object_taxonomies($post)) // возвращает массив всех $terms из любой таксономии

FooBar FooBar
7 окт. 2020 г. 22:56:42
Показать остальные 2 комментариев
2

get_categories отлично справится с этой задачей.

get_categories('taxonomy=taxonomy_name&type=custom_post_type'); 
21 июн. 2011 г. 14:46:16
Комментарии

(Думаю, если я правильно понял вопрос!)

addedlovely addedlovely
21 июн. 2011 г. 14:46:52

Дело в том, что у меня нет названия таксономии, это именно то, что я хочу выяснить. У меня есть только название типа записи. По названию типа записи я хочу найти все связанные с ним таксономии. В любом случае, спасибо!

Sisir Sisir
21 июн. 2011 г. 15:47:28
2

Извините за поднятие старого поста, но я столкнулся с этой проблемой, когда искал решение для своего случая.

Мне нужно было получить все доступные таксономии для типа записи, а также все доступные термины для каждой таксономии.

Спасибо Нику Б за направление меня в правильное русло с его ответом: https://wordpress.stackexchange.com/a/357448/198353

// получаем список доступных таксономий для типа записи
$taxonomies = get_taxonomies(['object_type' => ['your_post_type']]);

$taxonomyTerms = [];

// перебираем таксономии
foreach ($taxonomies as $taxonomy)
{
  // получаем все доступные термины, включая еще не использованные
  $terms    = get_terms(['taxonomy' => $taxonomy, 'hide_empty' => false]);

  // убеждаемся, что $terms является массивом, так как может быть числом (количество) или WP_Error
  $hasTerms = is_array($terms) && $terms;

  if($hasTerms)
  {
    $taxonomyTerms[$taxonomy] = $terms;        
  }
}
1 дек. 2020 г. 14:24:24
Комментарии

Это приводит к сбою моего сайта

Pete Pete
5 февр. 2021 г. 09:35:46

В каком смысле этот фрагмент кода вызывает сбой вашего сайта? Если только у вас не астрономическое количество таксономий и терминов, маловероятно, что проблема в этом фрагменте.

seemly seemly
10 февр. 2021 г. 15:21:38
0

Используйте get_object_taxonomies (https://developer.wordpress.org/reference/functions/get_object_taxonomies/), которая принимает в качестве параметра либо название вашего пользовательского типа записи, либо объект записи:

$taxonomies = get_object_taxonomies('custom_post_type');
$taxonomies = get_object_taxonomies($custom_post_object);

get_taxonomies() не возвращает таксономии, которые используются несколькими типами записей (https://core.trac.wordpress.org/ticket/27918).

25 февр. 2020 г. 22:37:12
2

Вы уже пробовали что-то сделать? Например, вот так:

<?php 

$args=array(
  'object_type' => array('event') // тип объекта
); 

$output = 'names'; // или objects
$operator = 'and'; // 'and' или 'or'
$taxonomies=get_taxonomies($args,$output,$operator); 
if  ($taxonomies) {
  foreach ($taxonomies  as $taxonomy ) {
    echo '<p>'. $taxonomy. '</p>';
  }
}
?>
21 июн. 2011 г. 12:31:25
Комментарии

Посмотрел функцию get_taxonomies(); в codex, но там очень скудная документация, и я не понял, как можно передать типы записей.

Sisir Sisir
21 июн. 2011 г. 12:56:21

Извините, этот код возвращает все зарегистрированные таксономии в WordPress.

Sisir Sisir
21 июн. 2011 г. 12:59:26
0
$taxonomies = get_taxonomies( [ 'object_type' => [ 'custom_post_type' ] ] );
29 янв. 2020 г. 18:13:16
1
get_post_taxonomies()

https://developer.wordpress.org/reference/functions/get_post_taxonomies/

Это сработало у меня.

11 мар. 2021 г. 23:47:41
Комментарии

Эта функция извлекает все названия таксономий для указанной записи, что не совсем то, что нужно автору вопроса, но именно это я и искал, спасибо.

frzsombor frzsombor
26 сент. 2023 г. 16:45:16