multiple custom post type on category page

Add to $post_type array, don’t replace it…

function dog_query_post_type($query) {

    if( is_category() &&  $query->is_main_query() && empty( $query->query_vars['suppress_filters'] ) ) {
        $post_type = get_query_var('post_type');
        if($post_type)
            $post_type[] = 'dog';
        else
            $post_type = array( 'post', 'dog', 'nav_menu_item');

        $query->set('post_type',$post_type);

        return $query;
    }

}
add_filter('pre_get_posts', 'dog_query_post_type');