Search code examples
phpwoocommercehookwoocommerce-theming

Add product category in woocommerce archive/shop page


I'm trying to add the product category inside the product card in the woocommerce archive page. Right now it shows "Thumbnail" "Title" "Price" and "Add to cart button".

I'm using this function which should work if the variable "product" is set to the current product displayed.

My Question: Is there a way to get the queried Product in this variable?

Any help is appreciated.

<?php 
// Hook after product title on archive page and run function "add_category()"
add_action('woocommerce_shop_loop_item_title','add_category');
    // Define function "add_category()"
    function add_category() {
        // set var "cardcategory"
        $cardcategory = $product->get_categories();
        // create wrapping div
        echo '<div class="category-carousel">';
        // Get  current category and change from plural to singular
        // echo singular inside <p> element
        if (strpos($cardcategory, 'Category_A_plural') !== false) {
            echo '<p class="Category_A_class">Category A singular</p>';
        }
        if (strpos($cardcategory, 'Category_B_plural') !== false) {
                echo '<p class="Category_B_class">Category B singular</p>';
        }
        // close wrapping div
        echo '</div>';
    }

Solution

  • <?php 
    //Hook after product title on archive page
    add_action('woocommerce_after_shop_loop_item_title','add_category');
    
    function add_category() {
        global $product; // You need to add this.
    
        // set var "cardcategory"
        $cardcategory = $product->get_categories();
        // Show category and change from plural to singular
        echo '<div class="category-carousel">';
    
        if (strpos($cardcategory, 'Category_A_plural') !== false) {
            echo '<p class="Category_A_class">Category A singular</p>';
        }
        if (strpos($cardcategory, 'Category_B_plural') !== false) {
                echo '<p class="Category_B_class">Category A singular</p>';
        }
        echo '</div>';
    }
    

    You need to add the line global $product as shown above. $product is an instance of WC_Product, I believe Woocommerce uses WordPress' the_post() functionality under the hood to set this variable but I'm not 100% sure.