WordPress Rewrite Url with arugments

Instead of using $_SESSION variables we’ll register a query variable.

function wpa_91718_query_var( $vars ) {
    $vars[] = 'event_page';
    return $vars;
}
add_filter( 'query_vars', 'wpa_91718_query_var' );

Then we can modify the query before it is run using pre_get_posts.

If I understood you and your code correctly, then if the query var is present in the URL, you want to search for the post with that ID. Otherwise, you just want to show the most recent CPT with the ‘schedule’ term in the ‘event_type’ taxonomy.

I think this can be done via:

function wpa_91718_pre_get_posts( $query ) {
    // only modify the main query and only on the front-end
    if ( !is_admin() && $query->is_main_query() ) {

    if ( is_post_type_archive( 'plug' ) ) {
      // Display only 1 post for the cpt archive
      set_query_var( 'posts_per_page', 1 );

      // if query var exists search for that particular post ID number
      if ( $event_page = get_query_var( 'event_page' ) ){
        set_query_var( 'p', (int) $event_page );
      // otherwise get the most recent post of event_type taxonomy
      } else {
        set_query_var( 'event_type', 'schedule' );
      }
    }
  }
}
add_action( 'pre_get_posts','wpa_91718_pre_get_posts' );

Totally untested, but I think it should put you on the right path.