Afficher tous les termes d'une taxonomie personnalisée?

18

J'ai fait quelques taxonomies personnalisées et je dois en montrer TOUS les termes, ce que j'ai réalisé jusqu'à présent montre les taxonomies qui sont sélectionnées / choisies dans un type de message personnalisé, mais j'ai besoin de toutes les afficher, que ce soit sélectionné ou non . Pour que plus tard, je puisse créer un filtre qui filtre en fonction des termes contenus dans une valeur de type de message personnalisé.

<?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 
                }
              }
            }  
            ?>

Ce que j'ai jusqu'ici.

Merci d'avance!

David H
la source
À quel moment cela échoue-t-il? Dans quelle mesure cela fonctionne-t-il comme vous le souhaitez?
s_ha_dum
Cela fonctionne, le problème est que je ne peux afficher que les termes SELECTED dans un type de message personnalisé. Je veux qu'ils montrent tous s'ils sont sélectionnés ou non, je ne veux pas avoir un type de post factice qui a tout sélectionné juste pour les montrer.
David H

Réponses:

39

Vous devez passer un argument supplémentaire à get_terms(). La valeur par défaut est de masquer les termes «vides» - termes qui ne sont attribués à aucun message.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);
s_ha_dum
la source
Merci beaucoup! Mais je veux demander quelque chose, pourquoi voudriez-vous créer un tableau à l'intérieur d'une variable au lieu de le déclarer au-dessus de l'endroit où le premier tableau est affiché?
David H
Simplicité. Si le tableau d'arguments était plus complexe, je l'aurais déclaré en premier (très probablement), mais pour un seul argument, c'est juste la façon la plus simple de le faire. Cela devrait aussi bien fonctionner dans les deux cas.
s_ha_dum
Merci beaucoup :) qui m'a beaucoup pensé. J'apprécie vraiment cela!
David H
Travaux!! Maintenant, je peux voir ce qui se passe avec toutes les options de taxonomie! Certains plugins y créent une structure complexe.
eyal_katz
6

Depuis 4.5.0, les taxonomies doivent être passées via l'argument 'taxonomy' dans le tableau $ args afin:

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

où les termes qui n'ont pas de messages sont masqués par défaut.

Lawrence Oputa
la source
3

Ce code récupère toutes les taxonomies personnalisées de catégorie et de sous-catégorie à l'aide de 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
la source