Так все очень просто.
Вы привязки в js делаейте при подгрузке страницы. Потом когда работает фильтр, он все элементы на странице удаляет, и создает новые. И вуаля, все Ваши привязки отвязаны.
Решений как всегда несколько
1 - Восстанавливать Ваши привязки после каждого процесса фильтрации. Это не сложно. Код кривязки закидываете в функцию и вызываете ее снова после фильтрации.
2 - Использовать делегирование, т.е привязывать на неудаляемого родителя. Обычно привязывают сразу на document? но можно и на body или еще что то близкое к карточкам товаров. Считаю это более правильным решением.
Для 2го варианта вместо
jQuery(document).ready(function ($) {
$('a.modal-product-link').on('click', function () {
ставим
jQuery(document).ready(function ($) {
$(document).on('click', 'a.modal-product-link', function () {