web-dev-qa-db-fra.com

Afficher la catégorie et les liens dans Woo commerce

Je souhaite afficher mes catégories avec une vignette dans woocommerce. Je peux lister les termes enfants sous forme de lien, mais j'aimerais ajouter du contenu supplémentaire. J'ai ajouté le code ci-dessous dans lequel j'utilise pour afficher les termes enfants de "product_cat" en tant que lien sur mon modèle home-page.php. Mais je voudrais aussi ajouter l'image de la catégorie. J'apprécierais vraiment l'aide MERCI.

<?php

$taxonomyName = "product_cat";
//This gets top layer terms only.  This is done by setting parent to 0.  
$parent_terms = get_terms($taxonomyName, array('parent' => 0, 'orderby' => 'slug', 'hide_empty' => false));   
echo '<ul>';
foreach ($parent_terms as $pterm) {
    //Get the Child terms
    $terms = get_terms($taxonomyName, array('parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false));
    foreach ($terms as $term) {

        echo '<li><a href="' . get_term_link( $term->name, $taxonomyName ) . '">' . $term->name . '</a></li>';  
    }
}
echo '</ul>';


?>
5
steamfunk

Ont fait de la personnalisation. Cela vous aidera à montrer des images de catégories de parents et d’enfants. Vous pourrez ensuite personnaliser ce code selon vos besoins.

    $taxonomyName = "product_cat";
//This gets top layer terms only.  This is done by setting parent to 0.  
    $parent_terms = get_terms($taxonomyName, array('parent' => 0, 'orderby' => 'slug', 'hide_empty' => false));

    echo '<ul>';
    foreach ($parent_terms as $pterm) {

        //show parent categories
        echo '<li><a href="' . get_term_link($pterm->name, $taxonomyName) . '">' . $pterm->name . '</a></li>';

        $thumbnail_id = get_woocommerce_term_meta($pterm->term_id, 'thumbnail_id', true);
        // get the image URL for parent category
        $image = wp_get_attachment_url($thumbnail_id);
        // print the IMG HTML for parent category
        echo "<img src='{$image}' alt='' width='400' height='400' />";

        //Get the Child terms
        $terms = get_terms($taxonomyName, array('parent' => $pterm->term_id, 'orderby' => 'slug', 'hide_empty' => false));
        foreach ($terms as $term) {

            echo '<li><a href="' . get_term_link($term->name, $taxonomyName) . '">' . $term->name . '</a></li>';
            $thumbnail_id = get_woocommerce_term_meta($pterm->term_id, 'thumbnail_id', true);
            // get the image URL for child category
            $image = wp_get_attachment_url($thumbnail_id);
            // print the IMG HTML for child category
            echo "<img src='{$image}' alt='' width='400' height='400' />";
        }
    }
    echo '</ul>';

Faites-moi savoir si cela répond à vos besoins.

2
WisdmLabs

Bonjour @Wisdmlabs Merci pour votre aide. J'ai trouvé que cela fonctionnait très bien au cas où quelqu'un d'autre se demanderait comment le faire.

$taxonomyName = "product_cat";
$prod_categories = get_terms($taxonomyName, array(
    'orderby'=> 'name',
    'order' => 'ASC',
    'hide_empty' => 1
));  

foreach( $prod_categories as $prod_cat ) :
    if ( $prod_cat->parent != 0 )
        continue;
    $cat_thumb_id = get_woocommerce_term_meta( $prod_cat->term_id, 'thumbnail_id', true );
    $cat_thumb_url = wp_get_attachment_thumb_url( $cat_thumb_id );
    $term_link = get_term_link( $prod_cat, 'product_cat' );
    ?>

    <img  src="<?php echo $cat_thumb_url; ?>" alt="" /> 
    <a class="button" href="<?php echo $term_link; ?>"> <?php echo $prod_cat->name; ?> </a> 
    <?php endforeach; 
wp_reset_query(); ?>
3
steamfunk

Pour optimiser davantage la réponse de @ Wisdmlabs ci-dessus, remplacez cette ligne

$cat_thumb_url = wp_get_attachment_thumb_url( $cat_thumb_id );

avec

$cat_thumb_url = wp_get_attachment_image_src( $cat_thumb_id, 'thumbnail-size' )[0]; // Change to desired 'thumbnail-size'

De cette façon, les images sont rognées à la taille appropriée sur le serveur pour réduire la charge de bande passante.

0
jgangso