Change arguments of the global query
Problem: We have default WordPress pages where not obviously set arguments e.g. archive.php how reset or change them?

Solution: Next we should use this code:
add_action( 'pre_get_posts', 'custom_query_on_archive_page' );
function custom_query_on_archive_page( $query ) {
// Check Post Type
if ( $query->is_post_type_archive( 'news' ) && $query->is_main_query() && ! is_admin() ) {
$query->set( 'posts_per_page', 10 );
} else if ( $query->is_post_type_archive( 'events' ) && $query->is_main_query() && ! is_admin() ) {
$args = [
'post_type' => 'events',
'posts_per_page' => -1,
'fields' => 'ids',
];
$events = new WP_Query( $args );
$events_ids = $events->posts;
$exclude_posts_ids = [];
foreach ( $events_ids as $event_id ) {
if ( strtotime( current_time( 'F j, Y' ) ) > strtotime( get_field( 'start_date', $event_id ) ) ) {
$exclude_posts_ids[] .= $event_id;
}
}
$query->set( 'posts_per_page', 12 );
$query->set( 'orderby', 'meta_value' );
$query->set( 'order', 'ASC' );
$query->set( 'meta_key', 'start_date' );
$query->set( 'post__not_in', $exclude_posts_ids );
}
}