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?** --- # 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' ); ---------- # EDIT: ATTEMPT 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. So I need that if clause...but WordPress doesn't seem to know it yet! Pasting the code directly to the template didn't work either, even if it's just these three lines before `get_header();`: global $wp_query; status_header( 200 ); $wp_query->is_404 = false; ---------- # EDIT: ATTEMPT 2 # I ditched `template_redirect` for hooking into `pre_get_posts`: function my_post_queries( $query ) { if (!is_admin() && $query->is_main_query()){ if (is_author()){ $query->set('posts_per_page', 3); // NEW CODE: $paged = (get_query_var('paged')) ? intval(get_query_var('paged')) : 1; global $original_page_request; // saves the original value of $paged because I'm about to alter it! if ($paged > $query->max_num_pages) { $query->set('paged', $query->max_num_pages); $original_page_request = $paged; } else { $query->set('posts_per_page', 9); } } } add_action( 'pre_get_posts', 'my_post_queries' ); The idea was to manually reset `paged` for the *main query* when it exceeds `max_num_pages` and store the "actual page" in `global $original_page_request` for my `$secondloop` to set its `paged` parameter to. **Unfortunately though, it doesn't work.** I was so happy not to see a 404 any more, but now it automatically sets the *main query* page to 0. *Why 0?!* Because in `pre_get_posts`, code is executed before WordPress got its posts. There's access to `$query` but that's just for setting query variables, there are no posts retreived, and thus no `max_num_pages` to calculate from. So that means I have no idea when I'm about to exceed max_num_pages. I then copied the new code from `my_post_queries( $query )` to another function which hooks into `wp`. There, `max_num_pages` is a valid number and is_author() is correct too. As soon as I exceed the number of posts, still no luck. 404. I could set `$wp_query->is_404 = false` but that returns me to the index yet again.