Изменить логику поиска товара в заказе

function fn_add_product_to_cart($product_data, &$cart, &$auth, $update = false)
{
    $ids = array();
    if (!empty($product_data) && is_array($product_data)) {
        if (!defined('GET_OPTIONS')) {
            list($product_data, $cart) = fn_add_product_options_files($product_data, $cart, $auth, $update);
        }

        fn_set_hook('pre_add_to_cart', $product_data, $cart, $auth, $update);

        foreach ($product_data as $key => $data) {
            if (empty($key)) {
                continue;
            }
            if (empty($data['amount'])) {
                continue;
            }

            // MODIFIE отправляет запрос на получения product_id с проверкой по commerceml_entity_map.
            // Потом происходит проверка в таблице products если external_id отсутствует. Обновляет и всавляет корректный 1C_id
            // FIXME : Изменить и сделать в модуле
            // $entity_id = fn_get_product_id_by_external_id($data['external_id'], $data['company_id']);
            // $product_id = (!empty($data['external_id'])) ? $entity_id : ((isset($data['product_id'])) ? (int) $data['product_id'] : (int) $key);

            // $external_id = db_get_field("SELECT external_id FROM ?:products WHERE product_id = ?i", $data['product_id']);
            // if (empty($external_id)) {
            //     update_product_external_id($data['product_id'], $data['company_id']);
            // }
            //После перевода выше стоящего кода, убрать комментарий
            $product_id = (!empty($data['product_id'])) ? (int) $data['product_id'] : (int) $key;

Хочу сделать проверку по external_id
в external_id я записываю 1c id товара.
Все это влияет при редактировании заказа при запросе PUT

$entity_id = fn_get_product_id_by_external_id($data['external_id'], $data['company_id']);
$product_id = (!empty($data['external_id'])) ? $entity_id : ((isset($data['product_id'])) ? (int) $data['product_id'] : (int) $key);

$external_id = db_get_field("SELECT external_id FROM ?:products WHERE product_id = ?i", $data['product_id']);
if (empty($external_id)) {
     update_product_external_id($data['product_id'], $data['company_id']);
}

Работает. Пытаюсь сделать в своем модуле но стоковый

$product_id = (!empty($data['product_id'])) ? (int) $data['product_id'] : (int) $key;

мешает. Как правильно сделать чтобы не конфликтовал?

Есть ли возможность сделать override функции, но с сохранением его использования? Или замены определенной строки кода с сохранением текущего?

Все таки пришлось самому хук сделать. И передать external_id в product_id если он пустой или отсутствует. Есть варианты лучше решить вопрос? Жду предложений)