As your pre_get_posts
function stands, you’ll have that conflict as you are using pre_get_posts
very carelessly.
pre_get_posts
modifies the query variable object before the main query AND WP_Query
is executed. So any changes in your function will influence both the main query and any custom query that uses WP_Query
. That is why everything is haywire in your forum pages as well, as you are adding these changes to your forum as well
Secondly, when working with any type of archive query (is_archive()
, is_category()
etc), any changes made with pre_get_posts
will also affect the back end
So, your solution would be to run pre_get_posts
only on the main query (is_main_query()
), and also just in the front end (!is_admin()
)
Something like this will do
if( !is_admin() && $query->is_main_query() && $query->is_archive() );
EDIT
I’m not going to change my code above. Only realized your code is for author page. Then you should be using is_author()
, not is_archive()