I am using the getCategories() function below:

use Magento\Catalog\Block\Product\AbstractProduct;
use Magento\Catalog\Block\Product\Context;

class Categories extends AbstractProduct

    private $logger;

    public function __construct(Context $context,
                                \Psr\Log\LoggerInterface $logger,
                                array $data = [])
        $this->logger = $logger;
        parent::__construct($context, $data);

    public function getCategories()
        $product = $this->getProduct();
        $cats = $product->getCategoryCollection()
        return $cats;

The layout file catalog_product_view.xml:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        <referenceContainer name="product.info.main">
            <block class="Company\ProductCategories\Block\Product\View\Categories"

And the template file categories.phtml:

    /** @var \Magento\Catalog\Model\Category $categories */
    $categories = $this->getCategories();

<?php if ($categories->getSize() > 0): ?>
<div id="product.view.categories">
    <?php foreach($categories as $category): ?>
        <a href="<?php echo $category->getUrl() ?>"><?php echo $category->getName() ?></a>
    <?php endforeach; ?>
<?php endif; ?>

So this returns the category names when going to a product from a category page.

However when I go to a product view from the front page through a new or latest products block, it does not add the category names to the results. It also doesn't add the proper path of breadcrumbs.

Just a bit more info the url when navigating from the catalog page:


Where ammunition and airgun are the categories.

when going from the home page the url is just:


I tested this on a standard magento install and whether going to the page from a catalog page or the home page the url is the same: http://magento2.dev/index.php/hero-hoodie.html and the categories show.

Why is that on this porto theme, there is an issue?

  • Which block class you use?
    – Sohel Rana
    Commented Jan 18, 2017 at 15:37
  • I am using a custom module block that extends abstractProduct
    – tread
    Commented Jan 18, 2017 at 17:32
  • Can you give more detail with code?
    – Sohel Rana
    Commented Jan 18, 2017 at 17:35
  • @SohelRana I have updated the code. Please take a look.
    – tread
    Commented Jan 19, 2017 at 7:02
  • Can you show your layout xml file?
    – Sohel Rana
    Commented Jan 19, 2017 at 7:19

1 Answer 1


Just to confirm, I've tested your code on a fresh Magento 2.1.2 and it works absolutely fine in both cases (when accessing the product via its direct URL or when accessing the product via the category).

Regarding your second question: yes I'm 90% sure the Porto theme is the problem. All those themes are shipped with a huge number of widgets, modules, custom modifications which are very often the root cause of many issues.

I'm not saying those themes are bad, they're great when you're dealing with a small store which do not need a lot of custom development and modifications. However, when you're dealing with a bigger structure, problems arise.

  • What is strange is that I can get the category url with ->getUrl()...
    – tread
    Commented Jan 27, 2017 at 7:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.