get_post возвращает вам массив.
Сколько раз его крутить в цикле не имеет значения, так же как не имеет значения в каком из типов циклов будет идти работа, тем более по задаче for подходит больше.
Но в вашем случае при фиксированном количестве позиций вывода цикл не обязателен.
Можно обращаться к элементам напрямую:
$args = array('posts_per_page' => 13, 'order' => 'desc');
$myposts = get_posts( $args );
......
if (isset($myposts[0])){
//выводим первый пост $myposts[0]
}
Из минусов некрасивый код на выходе, но из плюсов предельная простота.
Для написания более компактного кода можно воспользоваться
функциями для работы с массивами, а конкретно
array_slice, и уже над полученными в итоге массивами работать с foreach .
$mypost1 = array_slice($myposts, 0, 4);
$mypost2 = array_slice($myposts, 4, 3);
$mypost3 = array_slice($myposts, 7, 6);
if (!empty($mypost3)){
foreach ($mypost3 as $post){
//вывод поста
}
}