Afișează toți termenii dintr-o taxonomie personalizată?
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!

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.

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?

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.

Î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.

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

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

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.
