Dans mon thème WooCommerce, j'ai créé une catégorie racine: "Marques", puis pour chaque produit, j'ai ajouté sa marque en tant que sous-catégorie à la catégorie "Marques".
Sur la page du produit, je souhaite afficher la marque du produit actuel.
global $post;
// Get the brands ID from slug
$brands_id = get_term_by('slug', 'brands', 'product_cat');
// Get the children of that term
$termchildren = get_term_children( $brands_id, 'product_cat' );
// Loop through the children of 'brand' term to echo the name of the brand
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, 'product_cat' );
echo '<a href="' . get_term_link( $child, 'product_cat' ) . '">' . $term->name . '</a>';
}
Cela fait toujours écho tout les marques. Comment puis-je prendre cette information et filtrer les marques non associées au produit actuel?
Pas besoin de get_term_children()
du tout. Parcourez simplement get_the_terms()
pour obtenir ce dont vous avez besoin.
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' );
$taxonomy_name = 'product_cat';
$termchildren = get_term_children( $term_id, $taxonomy_name );
echo '<ul>';
foreach ( $termchildren as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
Tout d'abord, j'ai posé la même question ici et j'ai eu la réponse moi-même :)
Voici comment vous devriez le faire:
$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>';
}
si vous connaissez déjà l'ID de la catégorie parente, il vous suffit de passer cela comme INT et dans le cycle foreach, vous obtiendrez tous les termes enfants (sous-catégories) du parent. Aussi, si vous devez réutiliser ceci, je veux dire que si vous voulez afficher plusieurs fois la même requête et obtenir différents termes parent -> child
, je vous recommanderais d'écrire une fonction et de la placer dans le fichier functions.php. Cette fonction devrait ressembler à ceci:
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');
Et puis, chaque fois que vous voulez interroger les enfants du terme parent (catégorie), vous appelez simplement cette fonction avec le nom de la catégorie parent de la taxonomie sous la forme $ tax, et l'ID parent sous la forme $ pid, par exemple echo get_children_of_parent_terms('brands','15');
, en supposant que vous avez Les marques taxonomiques et un terme parent avec l'ID 15 qui afficheront tous les termes enfants du terme ayant l'ID 15.
À votre santé.