I researched your task and do not recommend you to do that.
The better way will be duplicate attribute set and assign it on products of your new category
If you still want to implement it, here is what I have found:
In my opinion your task doesn't have any clear solution, so I can recommend solution which is not very pretty look...
All filters are added via method setChild. It means that it doesn't work with layout updates like <remove ...
or <unsetChild ...
So we need to modify core files (you can do it via rewrite or smth like that...)
I'l give you an example of modified methods, so you can try to apply it on demo host...
Mage_Catalog_Block_Layer_View
protected function _prepareLayout()
{
$stateBlock = $this->getLayout()->createBlock($this->_stateBlockName)
->setLayer($this->getLayer());
$categoryBlock = $this->getLayout()->createBlock($this->_categoryBlockName)
->setLayer($this->getLayer())
->init();
$this->setChild('layer_state', $stateBlock);
$this->setChild('category_filter', $categoryBlock);
$filterableAttributes = $this->_getFilterableAttributes();
foreach ($filterableAttributes as $attribute) {
if (
Mage::registry('current_category')->getId() == 19
&& in_array($attribute->getAttributeCode(), array('style'))
) {
continue;
}
if ($attribute->getAttributeCode() == 'price') {
$filterBlockName = $this->_priceFilterBlockName;
} elseif ($attribute->getBackendType() == 'decimal') {
$filterBlockName = $this->_decimalFilterBlockName;
} else {
$filterBlockName = $this->_attributeFilterBlockName;
}
$this->setChild($attribute->getAttributeCode() . '_filter',
$this->getLayout()->createBlock($filterBlockName)
->setLayer($this->getLayer())
->setAttributeModel($attribute)
->init());
}
$this->getLayer()->apply();
return parent::_prepareLayout();
}
and
public function getFilters()
{
$filters = array();
if ($categoryFilter = $this->_getCategoryFilter()) {
$filters[] = $categoryFilter;
}
$filterableAttributes = $this->_getFilterableAttributes();
foreach ($filterableAttributes as $attribute) {
$filters[] = $this->getChild($attribute->getAttributeCode() . '_filter');
}
foreach ($filters as $filter) {
if ($filter !== false) {
$result[] = $filter;
}
}
return $result;
}
In first method I added this:
if (
Mage::registry('current_category')->getId() == 19
&& in_array($attribute->getAttributeCode(), array('style'))
) {
continue;
}
(modify here your category id and array of attribute codes)
In 2nd method I modify this:
foreach ($filters as $filter) {
if ($filter !== false) {
$result[] = $filter;
}
}
return $result;
In first file we just skip block creation for all these filters (there were some issues with swatch blocks, and probably you may face with some issues is you have customized layered) and in the 2nd method magento get all filterable attributes. And we need to exclude again our attribute from filter list