зачем усложнять простое? чем больше кода, тем больше шансов на ошибку.
коротко ревью (часть чисто мои хотелки, править не нужно):
1. весь вывод без фильтров (the_content, the_title и тп)
2. нет локализации (может и не нужна, но по стандартам надо)
3. <?= - короткие теги не по стандартам
4. get_post('news', '4') - второй параметр int или string?
5. $posts_per_page = -1 - плохо для производительности
6. два запроса к WP_Query, хотя можно было ограничится одним
https://codex.wordpress.org/Plugin_API/Filter_Refe...
7. нет проверки/фолбэка для get_the_post_thumbnail()
8. mb_strlen($post->post_content) >= 150 можно заменить на стандартный
https://developer.wordpress.org/reference/function...
9. ненужный wp_reset_postdata(). Функция нужна, если менялся глобальный $post при использовании стандартного лупа. Тут такого нет
10. собсно - нет стандартного лупа
https://codex.wordpress.org/The_Loop
если следовать стандартам, код станет производительнее, проще, понятнее и не будет ломать работу других плагинов.