get_term_children doar pentru copii direcți (fără nepoți)
Vreau să afișez termenii copil ai unei taxonomii personalizate. În prezent, pot face acest lucru folosind get_term_children, dar această metodă afișează atât copiii cât și nepoții, iar eu vreau să evit asta și să afișez doar copiii direcți.
Iată ce am momentan (dar afișează și copiii și nepoții):
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$termchildren = get_term_children( $term_id, $taxonomy_name );
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
Iată ce încerc să fac pentru a afișa doar copiii direcți:
<?php
$term_id = get_queried_object_id();
$taxonomy_name = 'mytaxname';
$args = array('parent' => $term_id,'parent' => $term_id );
$termchildren = get_terms( $taxonomy_name, $args);
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo ' <div class="product-archive">';
echo '<div class="post-title">
<h3 class="product-name"><a href="' .get_term_link( $term, $taxonomy_name ). '">' .$term->name. '</a></h3>
</div>
</div>'; }
?>
Aceasta îmi dă următoarea eroare:
Catchable fatal error: Object of class WP_Error could not be converted to string in...
Ce am făcut greșit?
Mulțumesc!
Folosește funcția get_terms()
în schimb:
$term_children = get_terms(
'mytaxname',
array(
'parent' => get_queried_object_id(),
)
);
if ( ! is_wp_error( $terms ) ) {
foreach ( $term_children as $child ) {
echo '
<div class="product-archive">
<div class="post-title">
<h3 class="product-name"><a href="' . get_term_link( $child ) . '">' . $child->name . '</a></h3>
</div>
</div>
';
}
}
get_terms()
poate returna un obiect WP_Error, așa că trebuie să verifici dacă nu a făcut acest lucru. Returnează un array de obiecte termen, deci nu mai este nevoie să le obții cu get_term_by()
. Deoarece $child
este un obiect termen, get_term_link()
nu are nevoie de al doilea parametru. get_terms()
are mai multe opțiuni pentru al doilea parametru. Ar trebui să te uiți.
