In author.php I have two loops: the default *main loop* that gets all posts from that author, and another custom *WP_Query* called `$secondloop`. Both queries have `posts_per_page` set to **3**. Now I'd like to **paginate both query results**.

For this I've added an argument to `$secondloop = new WP_Query($args)`:

    "paged" => (get_query_var('paged')) ? get_query_var('paged') : 1;
(read: set this query's page to the same page as the *main query's*).

# THE PROBLEM: #
 
 - If the *main loop* gives me 5 posts and my `$secondloop` gives me 2, then calling **page 2** works no problemo. It shows me the remaining 2 posts from the *main loop* and none from my `$secondloop` (since it doesn't go inside `while ($secondloop->have_posts())`).
 
 - **BUT** if the *main loop* has 2 posts and `$secondloop` has 5, then calling **page 2** results in **404** :(
I obviously want `$secondloop`'s remaining 2 posts instead.

Changing anything inside the author.php template doesn't help, because it seems that no PHP code in there is executed any more, once WordPress detects that `max_num_pages` from the *main loop* is exceeded.

**How can I "override" that behaviour?**


----------

# EDIT 1: #

Milo pointed me to an answer that suggested to add this to my **functions.php**:

    function my_404_override() {
      global $wp_query;
      
      if (is_author()) {
        status_header( 200 );
        $wp_query->is_404 = false;
      }
    }
    add_filter('template_redirect', 'my_404_override');

But it still shows me a 404 error. If I remove the if clause, then it leads me to the index.php which is not reeeally what I intended. My guess is that this code gets executed before WordPress knows what template it's dealing with, because I can't execute get_current_template(true) either.

I have 2 options now:

 1. figure out how to make this above attempt work, specifying a working if clause (because I don't want to redirect 404s *everywhere* and especially not to the index every time..). May that work somehow?
 2. make 2 split paginations for both my main query and my `$secondloop` query and then altering my pagination function

----------

# THE CODE: #

**author.php** (just the useful bit)

    <?php if (have_posts()) { ?>
        <div class="row archive-grid">
            <?php while (have_posts()) : the_post();
                include(locate_template('parts/loop-archive-grid.php'));
                endwhile; ?>
        </div>
    <?php }

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $secondloop = new WP_Query(array(
        "post_type"      => "musikalbum",
        "posts_per_page" => 3,
        "author_name"    => get_query_var('author_name'),
        "paged"          => $paged
    ));

    if ($secondloop->have_posts()) { ?>
        <div class="row archive-grid">
            <?php while ($secondloop->have_posts()) : $secondloop->the_post();
                get_template_part( 'parts/loop', 'album-grid' );
            endwhile; ?>
        </div>
        <?php author_page_navi( $loop );
    } else {
        joints_page_navi();
    } ?>

Setting the `posts_per_page` for my *main query* in my **functions.php**

    function my_post_queries( $query ) {
      if (!is_admin() && $query->is_main_query()){
        if (is_author()){
          $query->set('posts_per_page', 3);
        } else {
          $query->set('posts_per_page', 9);
        }
      }
    }
    add_action( 'pre_get_posts', 'my_post_queries' );


And here are the **pagination functions** used from my JointsWP4 starter theme:

    <?php // This function was standard from my JointsWP4 starter theme...
    function joints_page_navi($before = '', $after = '') {
      global $wpdb, $wp_query;
      $request = $wp_query->request;
      $posts_per_page = intval(get_query_var('posts_per_page'));
      $paged = intval(get_query_var('paged'));
      $numposts = $wp_query->found_posts;
      $max_page = $wp_query->max_num_pages;
      //...except for this line, since author_page_navi uses the same logic:
      page_navi_logic( $posts_per_page, $paged, $numposts, $max_page );
    }

    // A "hacked" version of joints_page_navi() for my $secondloop to work (or not)
    function author_page_navi( $loop ) {
      global $wpdb, $wp_query;
      $request = $wp_query->request;
      $posts_per_page = max(intval($wp_query->posts_per_page), intval($loop->posts_per_page));
      $paged = intval(get_query_var("paged"));
      $numposts = max($wp_query->found_posts, $loop->found_posts);
      $max_page = max($wp_query->max_num_pages, $loop->max_num_pages);
      page_navi_logic( $posts_per_page, $paged, $numposts, $max_page );
    }

    function page_navi_logic( $posts_per_page, $paged, $numposts, $max_page ) {
      if ( $numposts <= $posts_per_page ) { return; }
      if(empty($paged) || $paged == 0) {
        $paged = 1;
      }
      $pages_to_show = 3;
      $pages_to_show_minus_1 = $pages_to_show-1;
      $half_page_start = floor($pages_to_show_minus_1/2);
      $half_page_end = ceil($pages_to_show_minus_1/2);
      $start_page = $paged - $half_page_start;
      if($start_page <= 0) {
        $start_page = 1;
      }
      $end_page = $paged + $half_page_end;
      if(($end_page - $start_page) != $pages_to_show_minus_1) {
        $end_page = $start_page + $pages_to_show_minus_1;
      }
      if($end_page > $max_page) {
        $start_page = $max_page - $pages_to_show_minus_1;
        $end_page = $max_page;
      }
      if($start_page <= 0) {
        $start_page = 1;
      }
      echo $before.'<nav class="push-down"><ul class="pagination">'."";
      if ($start_page >= 2 && $pages_to_show < $max_page) {
        $first_page_text = __( 'Erste...', 'jointswp' );
        echo '<li><a href="'.get_pagenum_link().'" title="'.$first_page_text.'">'.$first_page_text.'</a></li>';
      }
      echo '<li>';
      previous_posts_link( __('Back', 'jointswp') );
      echo '</li>';
      for($i = $start_page; $i  <= $end_page; $i++) {
        if($i == $paged) {
          echo '<li class="current"> '.$i.' </li>';
        } else {
          echo '<li><a href="'.get_pagenum_link($i).'">'.$i.'</a></li>';
        }
      }
      echo '<li>';
      next_posts_link( __('Forward', 'jointswp'), $max_page );
      echo '</li>';
      if ($end_page < $max_page) {
        $last_page_text = __( 'Last...', 'jointswp' );
        echo '<li><a href="'.get_pagenum_link($max_page).'" title="'.$last_page_text.'">'.$last_page_text.'</a></li>';
      }
      echo '</ul></nav>'.$after."";
    }