如何在functions.php上使用多个pre_get_posts?

I will try to explain as good as I can (sorry if my english is bad, this is not my native):

I have two custom post types and two custom post type archive pages for each of them.

To filter posts which are displayed in those pages I created two different functions inside functions.php file with "pre_get_posts" function as you can see in code below.

My functions.php:

add_action('pre_get_posts', 'my_pre_get_posts'); 
function my_pre_get_posts( $query ) {

some code here...

}

add_action('pre_get_posts', 'my_pre_get_posts_2');
function my_pre_get_posts_2( $query ) {

some code here...

}

The problem is that second function (my_pre_get_posts_2) is overwriting first one (my_pre_get_posts) and first function is not working on custom post type archive page.

I tried to use is_post_type_archive( 'custom_post_type' ) but first function still is not working.

What I need to do to assign first function only to specific custom post type archive page and not to call it on any other pages?

This is covered in the Codex. You should use a single callback:

function my_pre_get_posts( $query ){
    if ( is_post_type_archive('cpt_1') ) {
        // Do stuff for a custom post type
    } elseif ( is_post_type_archive('cpt_2') ) {
        // Do stuff for a different custom post type
    }
}
add_action('pre_get_posts', 'my_pre_get_posts');