Про вырезание "-" вы выразились не очень понятно, поэтому я вас не так понял.
В общем, то что, Opencart не "безгрешен", не значит что нужно на это равнятся. Плохих примеров много, но нужно смотреть не на них, а на хорошие примеры, иначе направление будет не вверх а вниз.
Мой подход таков, что нужно либо решать проблему по-нормальному, либо вообще ничего не трогать, так как есть шанс что в следующей версии оригинального Opencart в том числе и эти баги будут исправлены.
Функция которую вы пытались исправить - наверное неспроста называется get - она должна во всех случаях кроме ошибок возвращать какое-то значение. Именно значение, а не null
А насчёт
strtolower(trim(preg_replace('~[^0-9a-z\.\/]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8'))));
Я считаю "половинчастые" решения очень вредными, так как они, на самом деле не решая проблему полностью, создают обманчивую видимость того, что проблема решена.
Это, знаете, как вместо того, чтобы лечить болезнь - частично скрывать симптомы того, что она существует.