Я думал в папке темы просто создаешь php файл любой и туда вываливаешь html разметку
Собственно также как и с главной странице (с index.php)
$lastposts[1]->post_title;
вместо the_title();
. И я бы сам вывод сделал через foreach, а вот как конкретно ручками пересортировать массив $lastposts в нужном порядке - вот тут можно подумать. В общем, я бы старался максимально унифицировать сам код, а сортировку делать в админке, по возможности.
Да, получить можно так (впрочем, смотрите мой обновленный ответ, cat не подходит потому что вернет и посты из дочерних категорий, category__in вернет только точное соответствие. То же самое с tag_id, думаю лучше tag__in (впрочем, не тестил).
Что касается вывода - это произвольный цикл. Вызов new WP_Query( $args ) вернет вам объект WP_Query, который вы можете использовать для произвольного цикла: