Previously in Magento, the wishlist link was added using the following (in wishlist.xml):
<action method="addWishlistLink"></action>
And you could override that and remove it using the following (in your local.xml):
<remove name="wishlist_link"/>
However, in the newest Magento, 1.4.2, they’ve changed how the wishlist link is added to the following:
<action method="addLinkBlock"><blockName>wishlist_link</blockName></action>
Anyone know how to remove the wishlist link now they’ve changed how it’s added?
It appears there’s no publicly available way to reliably remove the wishlist link block from the layout. (you can skip to the end for a workaround)
The
addLinkBlockassumes the presence of the block that’s been passed, so using remove in the way you describe results in a fatal error being thrownHere’s the core code that causes that error
This method assumes its going to be able to pull out a block by whatever name gets passed, so we can’t just remove the wishlist_link block as we could in previous versions.
The only mechanism for removing a link appears to be the following method on the same block class
However, this is done using string comparison, and there’s no reliable way (that I know of) to generate a URL Object from a layout file, cast it as a string, and pass it into the method (this would be required, as there are numerous configuration settings that can change what the final string URL will be). That makes this method not helpful for our needs.
So, what we can do it modify the existing wishlist_link block to use a blank or non-existant template. This way the block still renders, but it renders as an empty string. The end result is we avoid the fatal error mentioned above, but still manage to remove the link from our selected pages.
The following would remove the link from all the pages using the
default handle.<!-- file: local.xml --> <layout> <default> <reference name="wishlist_link"> <action method="setTemplate"><template>blank-link.phtml</template></action> </reference> </default> </layout>