Afișează toți termenii dintr-o taxonomie personalizată?

4 mar. 2014, 16:15:49
Vizualizări: 242K
Voturi: 47

Am creat câteva taxonomii personalizate și trebuie să afișez TOȚI termenii din acestea. Până acum am reușit să afișez taxonomiile care sunt selectate/alese într-un tip de postare personalizat, dar am nevoie să le afișez pe toate, indiferent dacă sunt selectate sau nu. Astfel încât mai târziu să pot crea un filtru care să filtreze în funcție de termenii pe care îi conține un tip de postare personalizat.

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

Asta am reușit până acum.

Mulțumesc anticipat!

2
Comentarii

În ce punct eșuează? Cât de mult funcționează așa cum ți-ai dori?

s_ha_dum s_ha_dum
4 mar. 2014 16:26:41

Funcționează, problema este că pot afișa doar termenii SELECTAȚI într-un tip de postare personalizat. Vreau ca toți termenii să fie afișați, indiferent dacă sunt selectați sau nu, nu vreau să am un tip de postare fictiv care să aibă totul selectat doar pentru a-i afișa.

David H David H
4 mar. 2014 16:28:30
Toate răspunsurile la întrebare 4
4
89

Trebuie să transmiți un argument suplimentar către get_terms(). Implicit, sunt ascunse termenii "goi" -- termenii care nu sunt atribuiți niciunei postări.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false, // afișează și termenii fără postări asociate
]);

EDITARE:

În cazul în care dorești să afișezi numele sau slug-ul taxonomiilor personalizate stocate în variabila $terms, poți folosi acest fragment de cod de mai jos:

foreach ($terms as $term){
  echo $term->slug." : "; // afișează slug-ul termenului
  echo $term->name; // afișează numele termenului
  echo "<br><br>";
}

Unde $term->slug afișează slug-ul elementului taxonomiei listat și $term->name afișează numele elementului taxonomiei corespunzător.

4 mar. 2014 16:42:36
Comentarii

Mulțumesc mult! Dar vreau să întreb ceva, de ce ai crea un array într-o variabilă în loc să îl declari mai sus unde este afișat primul array?

David H David H
4 mar. 2014 16:48:44

Simplitate. Dacă array-ul cu argumente ar fi fost mai complex, l-aș fi declarat mai întâi (cel mai probabil), dar pentru un singur argument aceasta este cea mai directă modalitate de a o face. Ar trebui să funcționeze la fel de bine în ambele cazuri.

s_ha_dum s_ha_dum
4 mar. 2014 16:53:09

Mulțumesc mult :) am învățat foarte multe. Chiar apreciez!

David H David H
4 mar. 2014 17:17:40

Funcționează!! Acum pot vedea ce se întâmplă cu toate opțiunile de taxonomie! Unele plugin-uri creează structuri complexe acolo.

eyal_katz eyal_katz
22 iun. 2018 19:41:42
0

Începând cu versiunea 4.5.0, taxonomiile ar trebui transmise prin argumentul 'taxonomy' în array-ul $args astfel:

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

unde termenii care nu au postări sunt ascunși în mod implicit.

21 iul. 2017 15:34:50
0

Acest cod preia toate taxonomiile personalizate pentru categorii și subcategorii folosind get_terms():

<?php 
// Preia toate categoriile părinte (cu parent=0)
$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
            // Setează argumentele pentru subcategorii
            $wsubargs = array(
               'hierarchical' => 1,
               'show_option_none' => '',
               'hide_empty' => 0,
               'parent' => $wcatTerm->term_id,
               'taxonomy' => 'product_cat'
            );
            // Preia subcategoriile folosind argumentele de mai sus
            $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 feb. 2017 10:54:48
1
<div class="col-sm-4">  
                <?php 
                // Obține toate categoriile părinte
                $categories = get_terms( array(
                        'taxonomy' => 'freelancer_type',
                        'hide_empty' => false,
                        'parent' => 0,
                    ) );
                ?>
                <select class="form-control" name="parent_category" id="parent_category">
                    <option value="">Selectează Categoria</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="">Selectează Subcategoria</option>
                </select>
            </div>
28 dec. 2021 10:27:48
Comentarii

Răspunsul tău ar putea fi îmbunătățit cu informații suplimentare. Te rugăm să [editezi] pentru a adăuga mai multe detalii, cum ar fi citări sau documentație, astfel încât alții să poată confirma că răspunsul tău este corect. Poți găsi mai multe informații despre cum să scrii răspunsuri bune în centrul de ajutor.

User User
3 ian. 2022 16:48:26