Попытка вывести термины пользовательской таксономии с помощью get_categories

14 авг. 2013 г., 13:13:23
Просмотры: 19K
Голосов: 3

Я использую этот небольшой фрагмент кода, чтобы попытаться вывести термины пользовательской таксономии для использования в метабоксе с выпадающим списком, но он ничего не показывает при реализации (хотя работает с дефолтной таксономией 'category')

$partners = array();
$partners_obj = get_categories(array('taxonomy' => 'partner-cat'));
$partners[''] = '-';
foreach ($partners_obj as $partner) {
    $partners[$partner->cat_ID] = $partner->cat_name;;
}

Как видите, моя пользовательская таксономия называется 'partner-cat' и есть записи в пользовательском типе записей, относящиеся к 2 разным терминам этой таксономии.

Любая помощь будет очень ценной.

0
Все ответы на вопрос 5
2
get_categories()

получает таксономии типа 'категории', в частности http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/category.php#L0, для получения пользовательских таксономий следует использовать get_terms(), здесь http://codex.wordpress.org/Function_Reference/get_terms

$terms = get_terms( 'partner-cat', 'orderby=count&hide_empty=0' );
$count = count($terms);
if ( $count > 0 ){
 echo "<ul>";
 foreach ( $terms as $term ) {
   echo "<li>" . $term->name . "</li>";

 }
 echo "</ul>";
}

Убедитесь, что вы указали правильный ярлык (slug), который зарегистрировали для таксономии, и измените WP_DEBUG на true в вашем конфигурационном файле, чтобы проверить наличие ошибок. Возможно, вы пытаетесь получить таксономию до её регистрации, и в этом случае не будет результатов, а также вы получите ошибку.

Можете ли вы вставить ваш код для регистрации таксономии?

14 авг. 2013 г. 13:53:19
Комментарии

Я даже не подумал об этом! Я добавлял функцию метабокса ДО функции пользовательской таксономии. Я поменял их местами, и теперь всё работает идеально. Спасибо!

Poisontonomes Poisontonomes
14 авг. 2013 г. 14:01:03

Отлично... :), простое решение, так что, наверное, стоит отметить его как ответ :P

Kumar Kumar
14 авг. 2013 г. 14:02:02
8

Пустые ли таксономические термины? По умолчанию они не отображаются. Вы можете попробовать использовать:

$partners_obj = get_terms( 'partner-cat', array('hide_empty' => false) );

Обратите внимание, что get_categories() использует get_term() для получения ваших терминов.

Ваш foreach также не совсем правильный. Вместо этого следует обращаться к term_id и name.

foreach ($partners_obj as $partner) {
    $partners[$partner->term_id] = $partner->name;
}

Полный код:

$partners = array();

$partners_obj =  get_terms( 'taxo-name-here', array('hide_empty' => false) );
echo '<pre>' . print_r( $partners_obj, true ) . '</pre>';
echo '<hr>';
$partners[''] = '-';
foreach ($partners_obj as $partner) {
    $partners[$partner->term_id] = $partner->name;;
}

echo '<pre>' . print_r( $partners, true ) . '</pre>';
14 авг. 2013 г. 13:37:15
Комментарии

Нет, в обоих есть записи. get_terms( 'partner-cat', array('hide_empty' => false) ); тоже не сработал... Это странно, потому что с обычными категориями записей всё работает нормально

Poisontonomes Poisontonomes
14 авг. 2013 г. 13:39:06

Обновил ответ. У меня это работает.

RRikesh RRikesh
14 авг. 2013 г. 13:43:57

Я попробовал этот вариант, но всё равно не получилось, хотя он выдал ошибку о недопустимой таксономии... Я несколько раз проверил название, и оно верное, так что не понимаю, в чём проблема

Poisontonomes Poisontonomes
14 авг. 2013 г. 13:52:57

get_terms возвращает wP_Error, когда таксономия не существует. Можешь попробовать с другой таксономией? Как ты её создаёшь? Кодом или плагином?

RRikesh RRikesh
14 авг. 2013 г. 13:55:45

Я только что попробовал с другой пользовательской таксономией - та же ошибка. Потом попробовал со стандартной "category" - сработало. Обе пользовательские таксономии существуют и в обеих есть записи... Создаю её кодом, без плагинов

Poisontonomes Poisontonomes
14 авг. 2013 г. 13:58:11

можешь показать код, который ты использовал для таксономии? Добавь его в свой вопрос

RRikesh RRikesh
14 авг. 2013 г. 13:59:26

Исправил. В конце концов решение оказалось простым, @dot1 подсказал мне проверить, какую функцию я вызываю первой, и всё что нужно было сделать — поставить мою пользовательскую таксономию первой, после чего всё заработало как надо. Спасибо за помощь

Poisontonomes Poisontonomes
14 авг. 2013 г. 14:02:25

Разве ты не используешь хуки для своих функций? Рад, что всё заработало :)

RRikesh RRikesh
14 авг. 2013 г. 14:03:24
Показать остальные 3 комментариев
2

Если вы используете пользовательские типы записей (CPT) и, предположим, вы создали пользовательскую таксономию для этого типа записей, например:

У вас есть тип записей с названием "Продукты" и таксономия с названием "Категории продуктов".

Если вам нужно отобразить таксономию CPT на странице продуктов внутри цикла, я бы рекомендовал использовать следующую функцию согласно кодексу WordPress:

http://codex.wordpress.org/Function_Reference/get_terms

Код для получения таксономии CPT для типа записей "products" должен выглядеть следующим образом:

$categories = get_terms( 'products', 'orderby=count&hide_empty=0' );

Затем для отображения таксономий используйте этот код:

<?php foreach($categories as $category):
 print $category->slug;print $category->name; 
?>
31 мар. 2015 г. 13:21:24
Комментарии

Просто совет: лучше использовать переменные типа $terms и $term при работе с функциями для терминов, такими как get_terms. Это менее запутанно, чем использование переменной типа $categories :-)

Pieter Goosen Pieter Goosen
31 мар. 2015 г. 13:25:53

@PieterGoosen Я знаю :), поэтому я и поменял свои переменные с $terms на $categories :)

Mile Milosheski Mile Milosheski
1 апр. 2015 г. 16:08:21
0

Способ WordPress:

$categories = (array) get_terms('partner-cat', array('hide_empty' => false));
foreach (array_keys($categories) as $k)
{
    _make_cat_compat($categories[$k]);
}

Это прямое использование реализации, которую WordPress применяет в функции get_categories(), расположенной в файле wp_includes\category.php

30 сент. 2015 г. 18:20:50
1
            <?php
                $args = array(
                    'type' => '', // необязательный параметр
                    'number' => '',
                    'hide_empty' => 0,
                    'taxonomy'  => 'product_cat' // название вашей пользовательской таксономии
                ); 
                $categories = get_categories($args); 
                //echo "<pre>";   print_r($categories);
                foreach($categories as $cat){
                    $catid = $cat->term_id;                 
                    $thumbnail_id = get_woocommerce_term_meta($catid, 'thumbnail_id', true );
                    $image = wp_get_attachment_url( $thumbnail_id );
                    $catname = $cat->name;
                    $catpage = $cat->slug;
                ?>
24 авг. 2016 г. 15:05:21
Комментарии

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

Ethan Rævan Ethan Rævan
24 авг. 2016 г. 15:14:32