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
    Jan 18 '17 at 15:37
  • I am using a custom module block that extends abstractProduct
    – stephen
    Jan 18 '17 at 17:32
  • Can you give more detail with code?
    – Sohel Rana
    Jan 18 '17 at 17:35
  • @SohelRana I have updated the code. Please take a look.
    – stephen
    Jan 19 '17 at 7:02
  • Can you show your layout xml file?
    – Sohel Rana
    Jan 19 '17 at 7:19

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()...
    – stephen
    Jan 27 '17 at 7:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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