web-dev-qa-db-fra.com

Affiche le type de publication personnalisé dans l'ordre hiérarchique avec get_terms

Comment puis-je afficher un type de publication personnalisé de produits avec une taxonomie personnalisée (catégorie de produit) dans une liste, dans un ordre hiérarchique?

J'aimerais les obtenir dans cet ordre:

h3.parentcategory 1
  -h4.childcategory 1
    -li.product of childcategory 1
    -li.product of childcategory 1
  -h4.childcategory 2
    -li.product of childcategory 2
    -li.product of childcategory 2

h3.parentcategory 2
  -h4.childcategory 1 of parent 2

Malheureusement, je ne parviens pas à comprendre le deuxième niveau (catégorie 1 et 2). J'utilise ce code pour afficher la catégorie et le produit:

$custom_terms = get_terms( 'productcategory' );
foreach ( $custom_terms as $custom_term ) {
    wp_reset_query();
    $args = array(  
        'post_type' => 'product',
        'tax_query' => array(
            array(
                'taxonomy' => 'productcategories',
                'field'    => 'slug',
                'terms'    => $custom_term->slug,
                'orderby'  => 'term_group',
            ),
        ),
    );
    $loop = new WP_Query( $args );
    if ( $loop->have_posts() ) {
        echo '<h3>' . $custom_term->name . '</h2>';
        while ( $loop->have_posts() ) : $loop->the_post();
            get_the_title();
        endwhile;
    }
}

J'ai besoin d'aide pour déterminer les niveaux imbriqués de cette liste.

J'édite ceci pour essayer de clarifier: merci pour l'aide. et désolé d'être un noob en postant ...

Ce que j'essaie de faire, c'est de lister les produits qui font partie d'une sous-catégorie, ces sous-catégories peuvent alors faire partie d'une grande famille (Maincategory). J'essaie de regrouper les sous-catégories dans une catégorie principale.

vegetables (Main)
  -tomatoes (sub)
     -red tomatoe sweet (product)
     -pink tomatoe sour (product)
  -cucumber (sub)
     -some kind of cucumber(product)

fruits (Main)
  -Apple(sub)
     -sweet Apple (product)
     -Golden delicious (product)
1
tarpier

Essayez quelque chose comme ça:

<?php
$parent_terms = get_terms(
    'name_of_your_taxonomy',
    array(
        'parent' => 0, 
        )
);

foreach( $parent_terms as $parent_term ) {

    $child_terms = get_terms(
        'name_of_your_taxonomy'
        array(
            'child_of' => $parent_term->term_id,
            )
    );

    foreach( $child_terms as $child_term ) {

        $args = array(
            'post_type' => 'product',
            'tax_query' => array(
                array(
                    'taxonomy'      => 'name_of_your_taxonomy',
                    'field'         => 'slug',
                    'terms'         => $child_term->slug,
                ),
            ),
        );

        $loop = new WP_Query($args);

        if( $loop->have_posts() ) :

            while ( $loop->have_posts() ) : $loop->the_post();

                echo '<h3>' . $parent_term->name . '</h3>';
                echo '<h4>' . $parent_term->name . '</h4>';
                echo get_the_title();

            endwhile;

        endif;

    }

}

wp_reset_query();

Ce que vous faites est essentiellement:

  1. Obtenir tous les termes parents;
  2. Parcourant les termes parentaux et obtenant les enfants de chaque terme;
  3. En boucle à travers les termes enfants et obtenir des messages associés à l'enfant.
2
darrinb