UPDATE: I would still love to know of a better way, especially on how to do "leave a review" on hidden simple products which were bought via a group

It's pretty much all in the question title. This does not make sense. I remember having to do manual development back in 2009 when grouped were new, but, we are now in 2016 surely this has matured?

I have this fairly classic set up:

  • Grouped Product visible and has all the editorial.
  • Individual Products (individual sku) as associated in the group products. Not visible individually

This is on up to date Magento 1.9

They are added to cart as grouped products so that the product in the cart properly links back to the group product when clicked.

But when the order is placed, this all seems to evaporate - the order shows the individual sku products only.

Which means:

  • order confirmation product links to the simple, non visible product: 404 (I have removed all links for now)
  • request for review add ons will send links to the simple, non visible product: 404 if clicked
  • my account "last ordered items" has links to the simple, non visible product: 404 if clicked

This is a standard scenario, I have not extended the checkout (though some add ons might have) and at first glance it seems to be internal to Magento.

How can it create sales-killing broken links like that, when it should be able to know, on generation of the email or pages, that the product is hidden?

Where do the links in my account, and other admin links, come from? I have found a way to override product links but that does not work on the "my account" "recent products" and "leave review" links, which is not helping me as these are the links that work properly.

How can it be fixed?

Update: tested on totally vanilla Magento, and this problem happens. Also on vanilla Magento 2. links in "my account" to reorder products, and any tool trying to generate review link, goes to a 404

  • Some one the aspects of grouped/configurable products are completely flawed. I remember having do to lots of costly devs to distinguish between simple products and others for the same reason you stated above. Jun 28, 2016 at 12:24
  • Thanks for confirming @Julien-Lachal I now did a quick test and yes, it does happen even on a vanilla Magento. Normal navigation etc is fine, but order related links all go to the invisible product, leading to 404
    – iphigenie
    Jun 28, 2016 at 13:29
  • just tested it on a vanilla Magento2 and they haven't changed this. Still no mechanism to deal with non visible simple products that have been ordered. links generated for "past orders" lead to 404, as do the ones in the order confirmation email cc @JulienLachal
    – iphigenie
    Jul 3, 2016 at 6:48
  • I've afraid you'll have to get your hands dirty on this one and test product types whenever a link is present, and if the product is a simple, get its parent URL. Jul 4, 2016 at 6:52
  • yup, that's what I ended up doing. For now I have extended Mage_Catalog_Model_Product to override getProductUrl though I will have to worry about performance. Also, there's at least 2 other ways modules use to get URL, so I have to worry about third party modules I install and perhaps override more. But should allow me to generate review requests, and it did fix the "your recent order" links
    – iphigenie
    Jul 4, 2016 at 11:00

1 Answer 1


For now, I have had to override getProductUrl()

This is my first go at it, performance options not checked yet - and as mentioned in the comment, this won't help if third party modules go straight to getUrlModel with no awareness of grouped products.

public function getProductUrl($useSid = null) {

    if ($this->getTypeId() == 'simple' && ($this->getVisibility() == 1) { 

        $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($pid);
        foreach($parentIds as $parentId) {
            $groupProduct = Mage::getModel('catalog/product')->load($parentId);
            if (($groupProduct->getVisibility())>1) {                   
                return ( $groupProduct->getUrlModel()->getProductUrl($groupProduct, $useSid));
    } else {
         return $this->getUrlModel()->getProductUrl($this, $useSid);

  • Instead of looping on the parents, you could get the 1st one (except if you have multiple parents with different visibility). Jul 4, 2016 at 13:06

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.