Cum să utilizezi get_term_children pentru a obține subcategoria unei categorii părinte pentru postul curent
În tema mea WooCommerce am creat o categorie rădăcină: 'Branduri' apoi pentru fiecare produs am adăugat brandul său ca subcategorie la categoria părinte 'Branduri'.
Pe pagina produsului vreau să afișez brandul produsului curent.
global $post;
// Obține ID-ul categoriei 'branduri' din slug
$brands_id = get_term_by('slug', 'brands', 'product_cat');
// Obține subcategoriile acestui termen
$termchildren = get_term_children( $brands_id, 'product_cat' );
// Parcurge subcategoriile termenului 'branduri' pentru a afișa numele brandului
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, 'product_cat' );
echo '<a href="' . get_term_link( $child, 'product_cat' ) . '">' . $term->name . '</a>';
}
Acest cod afișează întotdeauna toate brandurile. Cum pot folosi aceste informații pentru a filtra brandurile care nu sunt asociate cu produsul curent?

Nu este nevoie deloc de get_term_children()
. Doar parcurgeți get_the_terms()
pentru a obține ceea ce aveți nevoie.
global $post;
$brands_id = get_term_by('slug', 'brands', 'product_cat');
$terms = get_the_terms($post->ID, 'product_cat');
foreach ($terms as $term) {
if($term->parent === $brands_id->term_id) {
echo $term->name;
break;
}
}

$term_id = get_term_by( 'slug', 'brands', 'product_cat' ); // Obține ID-ul termenului cu slug-ul 'brands' din categoria de produse
$taxonomy_name = 'product_cat'; // Numele taxonomiei
$termchildren = get_term_children( $term_id, $taxonomy_name ); // Obține termenii copii
echo '<ul>';
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name ); // Obține detalii despre termenul copil
echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>'; // Afișează link către termenul copil
}
echo '</ul>';

În primul rând, am pus aceeași întrebare aici și am primit răspunsul singur :)
Iată cum ar trebui să procedați:
$taxonomies = array(
'brands'
);
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'fields' => 'all',
'parent' => '(parentID)',
'hierarchical' => true,
'child_of' => 0
);
$terms = get_terms($taxonomies, $args);
var_dump($terms);
foreach ($terms as $term) {
print '<h2 class="story-heading">'.$term->name.'</h2>';
}
Dacă știți deja ID-ul pentru categoria părinte, pur și simplu îl treceți ca INT și în ciclul foreach veți obține toți termenii copil (subcategoriile) părintelui. De asemenea, dacă trebuie să refolosiți acest lucru, adică dacă doriți să afișați de mai multe ori aceeași interogare și să obțineți diferiți termeni părinte -> copil
, aș recomanda să scrieți o funcție și să o plasați în functions.php. Funcția ar trebui să arate cam așa:
function get_children_of_parent_terms($tax, $pid) {
$taxonomies = $tax;
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'fields' => 'all',
'parent' => $pid,
'hierarchical' => true,
'child_of' => 0
);
$terms = get_terms($taxonomies, $args);
var_dump($terms);
foreach ($terms as $term) {
print '<h2 class="story-heading">'.$term->name.'</h2>';
}
}
add_action('init','get_children_of_parent_terms');
Și apoi, ori de câte ori doriți să interogați copiii din termenul părinte (categorie), pur și simplu apelați această funcție cu numele categoriei părinte a taxonomiei ca $tax și ID-ul părintelui ca $pid, de exemplu echo get_children_of_parent_terms('brands','15');
și presupunând că aveți taxonomia brands și un termen părinte cu ID-ul 15, aceasta va afișa toți termenii copil ai termenului cu ID-ul 15.
Noroc.
