Программист написал такой модификатор:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Fix Category</name>
<code>Fix</code>
<version>1.0</version>
<author>q3dm0</author>
<link>http://www.opencart.com</link>
<file path="catalog/model/catalog/product.php">
<operation error="skip">
<search><![CDATA[$sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";]]></search>
<add position="after"><![CDATA[
if (!empty($data['filter_category_id']) && $data['filter_category_id'] == 18) {
$sql .= " AND p2c.product_id NOT IN (SELECT product_id FROM " . DB_PREFIX . "product_to_category WHERE category_id IN ('46','20'))";
}
]]></add>
</operation>
</file>
</modification>
Здесь 18 заменить на ID родительской категории:
$data['filter_category_id'] == 18)
Здесь перечислить ID вложенных категорий, которые нужно скрыть:
WHERE category_id IN ('46','20'))";