Если кому-то все же нужно, то на примере дефолтного шаблона можно так:
1. catalog/controller/product/product.php
найти:
$data['model'] = $product_info['model'];
добавить после:
$data['product_quantity'] = $product_info['quantity'];
найти массив $data['products'][] = array(
добавить перед:
$product_quantity = $result['quantity'];
найти:
'price' => $price,
добавить после:
'product_quantity' => $product_quantity,
2. catalog/view/theme/default/template/product/product.tpl
вариант А - просто скрыть (будет в коде страницы, но не будет отображаться, скрываясь стилем)
найти:
<?php if ($price) { ?>
<ul class="list-unstyled">
заменить на:
<?php if ($price) { ?>
<ul class="list-unstyled" <?php if ($product_quantity <= '0') { ?>style="display: none;"<?php } ?>>
вариант B - не выводить (не будет выводиться вовсе, в коде страницы не фигурирует)
найти:
<?php if ($price) { ?>
заменить на:
<?php if ($price && $product_quantity > '0') { ?>
там же для связанных товаров (в примере вариант А, вариант B по аналогии с предыдущим
найти:
<?php if ($product['price']) { ?>
<p class="price">
заменить на:
<?php if ($product['price']) { ?>
<p class="price" <?php if ($product_quantity <= '0') { ?>style="display: none;"<?php } ?>>
Для тех, кого устраивает и шаблон таки дефолтный, в аттаче ocmod с вариантом B, только для страницы товара.
Только вы должны учитывать, что если скрывать, то везде, соответственно аналогичную процедуру необходимо провести с контроллерами и шаблонами категорий, производителей, поиска, акций, последних, рекомендуемых, и т.д. - везде, где выводится цена товара.
hide-price-if-zero_product-page.ocmod.xml