1. ajax надо отправлять не сразу же, а лишь по сабмиту формы
2. ajax обработает location не так, как вам хочется. Он загрузит новую страницу внутрь div
Потому что это одно и то же правило. Срабатывает первое.
Для роутера что 'region', что 'city' - это просто имена переменных, в которые он запишет значение.
Я бы повесил триггер на referral_transaction при переходе в статус "approved", чтобы добавлялась запись в balance_transaction. И суммировал только balance_transaction.
Сравнение entity_id с 5 значениями, post_type - с 12-ю. Итого 60 сравнений на каждую запись! Оптимизатор в реальности сделает меньше сравнений, но все равно это очень неэффективно.
Надо детально разбираться в нюансах и менять бизнес-логику.
Вместо дублирования верхнего и нижнего регистра надо использовать модификатор "i".
Символ "i" есть как в $OnlyEn, так и в $Eng.
Зачем русские символы менять на английский с похожим написанием? И наоборот.
Не учитывается, что в предложении могут быть знаки препинания.
Поиск частичного вхождения не имеет никакого отношения ни к русскому, ни к английскому языкам. Например, этот алгоритм считает слова "пар", "парк", Париж", "парикмахерская" и пр. - одним и тем же словом.
Если уж решается задача поиска вхождения, то не надо изобретать велосипед с квадратными колесами. Проще отрезать окончание и вызвать готовую функцию ru2.php.net/manual/en/function.mb-stristr.php