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

4 мар. 2014 г., 16:15:49
Просмотры: 242K
Голосов: 47

Я создал несколько пользовательских таксономий, и мне нужно показать ВСЕ термины из них. На данный момент я могу показать только таксономии, которые выбраны в произвольном типе записи, но мне нужно показать все термины, независимо от того, выбраны они или нет. Это нужно для того, чтобы позже создать фильтр, который будет фильтровать в зависимости от того, какие термины содержит значение произвольного типа записи.

<?php 
// Аргументы для получения таксономий
$args=array(
  'public'   => true,
  '_builtin' => false
);
$output = 'names'; // или objects
$operator = 'and';
$taxonomies=get_taxonomies($args,$output,$operator); 
if  ($taxonomies) {
  foreach ($taxonomies  as $taxonomy ) {
    $terms = get_terms($taxonomy);
        foreach ( $terms as $term) {
?>
        <li><br><a href="#"><input type="checkbox" name="profile[]" value=""><?php echo $term->name; ?> <br/></a></li>
       <?php 
                }
              }
            }  
            ?>

Вот что у меня есть на данный момент.

Заранее спасибо!

2
Комментарии

В какой момент это перестает работать? Какая часть работает так, как вам хотелось бы?

s_ha_dum s_ha_dum
4 мар. 2014 г. 16:26:41

Это работает, проблема в том, что я могу показать только ВЫБРАННЫЕ термины в пользовательском типе записи. Я хочу, чтобы отображались все термины, независимо от того, выбраны они или нет. Я не хочу создавать фиктивный тип записи, в котором выбрано всё, только для того, чтобы их показать.

David H David H
4 мар. 2014 г. 16:28:30
Все ответы на вопрос 4
4
89

Вам нужно передать дополнительный аргумент в функцию get_terms(). По умолчанию скрываются "пустые" термины - термины, которые не присвоены ни одной записи.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);

РЕДАКТИРОВАТЬ:

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

foreach ($terms as $term){
  echo $term->slug." : ";
  echo $term->name;
  echo "<br><br>";
}

Где $term->slug выводит ярлык элемента таксономии из списка, а $term->name выводит название соответствующего элемента таксономии.

4 мар. 2014 г. 16:42:36
Комментарии

Большое спасибо! Но я хочу спросить кое-что: почему вы создаете массив внутри переменной вместо того, чтобы объявить его выше, где показан первый массив?

David H David H
4 мар. 2014 г. 16:48:44

Для простоты. Если бы массив аргументов был более сложным, я бы объявил его сначала (скорее всего), но для единственного аргумента это просто самый прямой способ. Это должно работать одинаково хорошо в любом случае.

s_ha_dum s_ha_dum
4 мар. 2014 г. 16:53:09

Большое спасибо :) это многому меня научило. Я очень это ценю!

David H David H
4 мар. 2014 г. 17:17:40

Работает!! Теперь я могу видеть, что происходит со всеми параметрами таксономии! Некоторые плагины создают там сложную структуру.

eyal_katz eyal_katz
22 июн. 2018 г. 19:41:42
0

Начиная с версии 4.5.0, таксономии должны передаваться через аргумент 'taxonomy' в массиве $args следующим образом:

$terms = get_terms( array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false,
) );

где термины, не имеющие записей, по умолчанию скрыты.

21 июл. 2017 г. 15:34:50
0

Этот код получает все категории и подкатегории пользовательских таксономий с помощью get_terms():

<?php 
// Получаем все родительские категории продуктов, включая пустые
$wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'parent' =>0)); 
   foreach($wcatTerms as $wcatTerm) : 
   ?>
<ul>
   <li>
      <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>
      <ul class="megaSubCat">
         <?php
            // Параметры для получения подкатегорий
            $wsubargs = array(
               'hierarchical' => 1,
               'show_option_none' => '',
               'hide_empty' => 0,
               'parent' => $wcatTerm->term_id,
               'taxonomy' => 'product_cat'
            );
            // Получаем все подкатегории для текущей родительской категории
            $wsubcats = get_categories($wsubargs);
            foreach ($wsubcats as $wsc):
            ?>
         <li><a href="<?php echo get_term_link( $wsc->slug, $wsc->taxonomy );?>"><?php echo $wsc->name;?></a></li>
         <?php
            endforeach;
            ?>  
      </ul>
   </li>
</ul>
<?php 
   endforeach; 
   ?>
14 февр. 2017 г. 10:54:48
1
<div class="col-sm-4">  
                <?php 
                // Получаем список категорий
                $categories = get_terms( array(
                        'taxonomy' => 'freelancer_type', // Таксономия фрилансера
                        'hide_empty' => false, // Показывать пустые категории
                        'parent' => 0, // Только родительские категории
                    ) );
                ?>
                <select class="form-control" name="parent_category" id="parent_category">
                    <option value="">Выберите категорию</option>
                    <?php  
                        // Перебираем все категории
                        foreach($categories as $category) {
                            ?>
                                <option value="<?php echo $category->term_id; ?>"><?php echo $category->name; ?></option>
                            <?php 
                        }   
                            
                    ?>      
                </select>
                <select class="form-control" name="child_category" id="child_category">
                    <option value="">Выберите подкатегорию</option>
                </select>
            </div>
28 дек. 2021 г. 10:27:48
Комментарии

Ваш ответ можно улучшить, добавив дополнительную подтверждающую информацию. Пожалуйста, [edit] чтобы добавить больше деталей, таких как цитаты или документация, чтобы другие могли подтвердить правильность вашего ответа. Вы можете найти больше информации о том, как писать хорошие ответы в центре помощи.

User User
3 янв. 2022 г. 16:48:26