web-dev-qa-db-fra.com

Utilisez get_term_children pour obtenir la sous-catégorie d’une catégorie parente pour le message en cours.

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?

1
tommyf

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;
    }
}
3
tommyf
$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>';
1
Bindiya Patoliya

Tout d'abord, j'ai posé la même question ici et j'ai eu la réponse moi-même :)

https://wordpress.stackexchange.com/questions/188839/wordpress-tags-and-hierarchy-parent-child-relation

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

0
Mile Milosheski