get_posts shows current post, not defined posts with args

As documented:

setup_postdata() does not assign the global $post variable so it’s
important that you do this yourself. Failure to do so will cause
problems with any hooks that use any of the above globals in
conjunction with the $post global, as they will refer to separate
entities.

So you need to do this:

global $post; // This...

foreach ($post_types1 as $post_type1) {
    $post = $post_type1; // ...and this.

    setup_postdata( $post_type1 );

    // etc.
}

wp_reset_postdata();