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

18

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

<?php 
$args=array(
  'public'   => true,
  '_builtin' => false
);
$output = 'names'; // or 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 
                }
              }
            }  
            ?>

Что у меня так далеко.

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

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

Ответы:

39

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

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);
s_ha_dum
источник
Спасибо огромное! Но я хочу спросить кое-что, зачем вам создавать массив внутри переменной, вместо того, чтобы объявлять его выше, где показан первый массив?
Дэвид Х
Простота. Если бы массив аргументов был более сложным, я бы объявил его первым (скорее всего), но для одного аргумента, который является просто самым простым способом сделать это. Это должно работать одинаково хорошо в любом случае.
s_ha_dum
Большое спасибо :), что мне очень понравилось. Я очень ценю это!
Дэвид Х
Работает!! Теперь я могу видеть, что происходит со всеми вариантами таксономии! Некоторые плагины создают сложную структуру там.
eyal_katz
6

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

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

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

Лоуренс Опута
источник
3

Этот код выбирает все категории и подкатегории пользовательских таксономий, используя 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; 
   ?>
Amit Gangrade
источник