Кроме того, что return $query делать не обязательно, код написан корректно. Вероятно, что портфолио у вас не категория, а произвольная таксономия. В этом случае аргумент category__not_in не сработает, для таксономии нужно писать массив tax_query
Еще одна из вероятных причин в том, что вы находитесь не на странице, которая отвечает проверке is_home()
. Этот условный тег проверяет показывается ли страница с последними постами, зависит от настроек параметров Чтение → Показывать последние записи сайта