У меня есть еще есть два вопроса:
1) почему WP_Query был заменен на get_posts (внутри foreach). Не совсем понял, в чем там суть такой замены?
2) все выводы данных типа id или title через get_ и с очисткой esc_attr. Опять же, не совсем понял, зачем так сделано.
Очень хочется понять, почему так?
1. С чего вдруг замена? get_posts - это обретка для WP_Query которая на выходе выдает массив, а не объкт и заоодно кеширует выхходные данные
2. А как надо? get означает что данные возвращаются, а не выводятся, а очистка - это безопасность, да по стандартам принято все выходные данные очищать